Php 递归正则表达式:如何设置与字符串而不是单个字符的不匹配
我的php代码:Php 递归正则表达式:如何设置与字符串而不是单个字符的不匹配,php,regex,preg-match-all,Php,Regex,Preg Match All,我的php代码: $exp = 'zzz<pre>sssss<pre>fff</pre>ff</pre>zzz'; \preg_match_all("#<pre>((?>[^(?:<pre>)(?:</pre>)]|(?R))*)</pre>#si", $exp, $matches); $i = 0; for
$exp = 'zzz<pre>sssss<pre>fff</pre>ff</pre>zzz';
\preg_match_all("#<pre>((?>[^(?:<pre>)(?:</pre>)]|(?R))*)</pre>#si", $exp, $matches);
$i = 0;
foreach ($matches as $item) {
foreach ($item as $elem)
{
echo "$i ", \htmlentities($elem), "<br>";
}
$i++;
}
ffzzz;//ssspss中的p
输出
0
1 fff
告诉我,如何构建正则表达式以设置与字符串的不匹配,而不是单个字符的不匹配?您可能希望使用a而不是: 看 您的正则表达式未按预期工作,因为[^?:]与[^negated]中未包含的任何字符匹配。任何不属于下列字符之一的字符:
SeNoTo: ReEX不适合解析任意嵌套的HTML。考虑.< /P> < P>可能您想使用A代替:
看 您的正则表达式未按预期工作,因为[^?:]与[^negated]中未包含的任何字符匹配。任何不属于下列字符之一的字符:SeNoTo: ReEX不适合解析任意嵌套的HTML。考虑.< /P>谢谢您的帮助,特别是对ReGEX101.COM的帮助,特别是对于ReGEX101.com的链接
[^(?:<pre>)(?:</pre>)]
~<pre>((?>(?!</?pre).|(?R))*)</pre>~si