ホームページ >バックエンド開発 >PHPチュートリアル >正则表达式顺序否定环视匹配问题
我要匹配的内容是这个样子的:
<code>{% foreach $data $key $value %} 233 {% endforeach %} 2333333 {% foreach $data $key $value %} 233 {% endforeach %} </code>
要匹配第一个foreach里面的内容,写了一个介个样子的正则表达式
<code>preg_match_all('/{%\s*foreach\s*(\$\S+)\s*(\$\S+)\s*(\$\S+)\s*%}((?!endforeach)[\s\S]*){%\s*endforeach\s*%}/i', $page, $match); </code>
因为有两个foreach,所以我用了否定环视,也就是中间这一部分
[\s\S]*)
我要匹配的内容是这个样子的:
<code>{% foreach $data $key $value %} 233 {% endforeach %} 2333333 {% foreach $data $key $value %} 233 {% endforeach %} </code>
要匹配第一个foreach里面的内容,写了一个介个样子的正则表达式
<code>preg_match_all('/{%\s*foreach\s*(\$\S+)\s*(\$\S+)\s*(\$\S+)\s*%}((?!endforeach)[\s\S]*){%\s*endforeach\s*%}/i', $page, $match); </code>
因为有两个foreach,所以我用了否定环视,也就是中间这一部分
[\s\S]*)
你是要模仿实现模板引擎吗?
我觉得你想要的是将你要匹配的内容变换成这个样子:
<code><?php foreach( $data $key => $value): ?> 233 <?php endforeach; ?> </code>
这样的话, 应该使用不到环视的, 解决起来也简单些.