首頁 > 後端開發 > php教程 > 正则表达式顺序否定环视匹配问题

正则表达式顺序否定环视匹配问题

WBOY
發布: 2016-06-06 20:37:00
原創
1495 人瀏覽過

我要匹配的内容是这个样子的:

<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]*)

  • -匹配出来的结果跟没加(?!endforeach)的效果一样,刚开始学环视- - 求大牛指导

回复内容:

我要匹配的内容是这个样子的:

<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]*)

  • -匹配出来的结果跟没加(?!endforeach)的效果一样,刚开始学环视- - 求大牛指导

你是要模仿实现模板引擎吗?
我觉得你想要的是将你要匹配的内容变换成这个样子:

<code><?php foreach( $data $key => $value): ?>
233
<?php endforeach; ?>
</code>
登入後複製

这样的话, 应该使用不到环视的, 解决起来也简单些.

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板