我有以下代码段,我想使用正则表达式在{foreach}
和{/foreach}
之间提取代码:
{foreach (...)}
Some random HTML content <div class="">aklakdls</div> and some {$/r/template} markup inside.
{/foreach}
我已经拥有:
{foreach [^}]*}
但在此之后我无法匹配任何内容。有没有办法匹配任何东西但是{/ foreach}作为一个整体令牌?请注意,{foreach} {/ foreach}之间的内容也可以包含“{$”代币。
修改:BaileyP&amp; Tomalak的答案是正确的,但为了简单起见,我选择了BaileyP的答案。
答案 0 :(得分:5)
答案 1 :(得分:2)
如果你的正则表达式味道不支持非贪婪的匹配,下面会这样做,但是因为它确实如此,我推荐@BaileyP's answer。
\{foreach [^}]*\}((?:.(?!\{/foreach\}))*[^{]?)
根据您的正则表达式,负零宽度前瞻和非捕获组看起来有点不同。
以下是组件:
\{foreach [^}]*\} // pretty much self-explanatory ( // match group one starts (that's what you are looking for) (?: // non-capturing group starts . // anything... (?!\{/foreach\}) // ... that is not followed by "{/foreach}" )* // non-capturing group ends, repeat as often as possible [^{]? // match the last character, unless it is "{" ) // match group one ends, done