{% foreach $data $key $value %}233{% endforeach %}2333333{% foreach $data $key $value %}233{% endforeach %}
要匹配第一个foreach里面的内容,写了一个介个样子的正则表达式
preg_match_all('/{%\s*foreach\s*(\$\s+)\s*(\$\s+)\s*(\$\s+)\s*%}((?!endforeach)[\s\s]*){%\s*endforeach\s*%}/i', $page, $match);
因为有两个foreach,所以我用了否定环视,也就是中间这一部分
[\s\s]*)
-匹配出来的结果跟没加(?!endforeach)的效果一样,刚开始学环视- - 求大牛指导回复内容: 我要匹配的内容是这个样子的:
{% foreach $data $key $value %}233{% endforeach %}2333333{% foreach $data $key $value %}233{% endforeach %}
要匹配第一个foreach里面的内容,写了一个介个样子的正则表达式
preg_match_all('/{%\s*foreach\s*(\$\s+)\s*(\$\s+)\s*(\$\s+)\s*%}((?!endforeach)[\s\s]*){%\s*endforeach\s*%}/i', $page, $match);
因为有两个foreach,所以我用了否定环视,也就是中间这一部分
[\s\s]*)
-匹配出来的结果跟没加(?!endforeach)的效果一样,刚开始学环视- - 求大牛指导
你是要模仿实现模板引擎吗?
我觉得你想要的是将你要匹配的内容变换成这个样子:
$value): ?>233
这样的话, 应该使用不到环视的, 解决起来也简单些.