PHP如何截取括号间字符串以提取punycode?
PHP提取括号内Punycode的解决方案
方法一:正则表达式(推荐)
利用正则精准匹配(和)之间的内容,批量处理多行文本效率很高:
$input = <<<TEXT vizipipa.hu ekezet (xn--vzipipa-7ya.hu) zoldtea.hu ekezet (xn--zldtea-wxa.hu) uzletiakademia.hu ekezet (xn--zletiakadmia-jeb0x.hu) ozon.hu ekezet (xn--zon-fna.hu) TEXT; // 匹配括号内的内容,捕获括号间的字符串 preg_match_all('/\((.*?)\)/', $input, $matches); // $matches[1]即为提取到的所有Punycode数组 print_r($matches[1]);
运行后输出:
Array ( [0] => xn--vzipipa-7ya.hu [1] => xn--zldtea-wxa.hu [2] => xn--zletiakadmia-jeb0x.hu [3] => xn--zon-fna.hu )
正则说明:\(转义匹配左括号,(.*?)是非贪婪捕获组(避免匹配多个括号的情况),\)转义匹配右括号。
方法二:字符串函数手动截取
如果不想依赖正则,可以通过定位括号位置来截取内容:
$lines = explode("\n", $input); $punycodes = []; foreach ($lines as $line) { $leftPos = strpos($line, '('); $rightPos = strpos($line, ')'); // 确保两个括号都存在 if ($leftPos !== false && $rightPos !== false) { // 从左括号后一位开始,截取到右括号前的内容 $punycodes[] = substr($line, $leftPos + 1, $rightPos - $leftPos - 1); } } print_r($punycodes);
这个方法先按行拆分文本,逐行定位左右括号的位置,再截取中间的目标字符串。
内容的提问来源于stack exchange,提问作者Arany Péter
相关产品推荐
相关产品推荐

