为什么preg_match_all
无效?
$pattern = '/\{(?:[^{}]|(?R))*\}/';
$result = 161240
个字符
if (preg_match_all($pattern, $result, $matches)) {
echo 'Success';
} else {
echo 'Not working';
}
显示:"不工作"
答案 0 :(得分:0)
播放模式使用正则表达式递归匹配平衡的大括号。模式本身看起来很好,可以作为intended。
<?php
$re = '/{(?>[^{}]|(?R))*\}/m';
$str = 'Why is preg_match_all not working?{{{{{
$pattern = \'/\\{(?:[^{}]|(?R))*\\}/\';
$result = 161240 characters
if (preg_match_all($pattern, $result, $matches)){ {
echo \'Success\';
} else {
echo \'Not working\';
}
}}}}}}{}{}{}{}{}{}{}{{{{{{}}}}}';
//preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
if (preg_match_all($re, $str, $matches)) {
echo 'Success\n';
} else {
echo 'Not working\n';
}
// Print the entire match result
var_dump($matches);
这也适用于较大的输入(此处tested,大约5000个字符)。 最可能的解释是:模式找不到有效匹配。
但是,您正在一个非常大的输入字符串上运行递归正则表达式。很多东西都可能出错。 PCRE引擎达到内部限制,字符串未正确编码,超时等。