贪婪的正则表达匹配

时间:2010-08-31 06:16:34

标签: regex pcre regex-greedy

我正在尝试匹配看起来像这样的字符串:

<$Fexample text in here>>

用这个表达式:

<\$F(.+?)>{2}

但是,在某些情况下,我的反向引用内容包含“&gt;”,因此类似这样:

<$Fexample text in here <em>>>

仅在后向引用中匹配example text in here <em。如果有或没有这些html实体,我需要做些什么才能有条件地返回正确的后退?

3 个答案:

答案 0 :(得分:5)

您可以将开始和结束锚点添加到正则表达式中:

^<\$F(.+?)>{2}$

答案 1 :(得分:3)

尝试

<\$F(.+?)>>(?!>)

(?!>)仅强制>>长序列中的最后>>>..>>>次匹配。


编辑:

<\$F(.+?>*)>>

也有效。

答案 2 :(得分:0)

请注意,除了真正做(我认为)你想做的事情,你必须解释格式正确的括号表达式,这是常规语言无法实现的。

换句话说,<$Fexample <tag <tag <tag>>> example>> oh this should not happen>将返回example <tag <tag <tag>>> example>> oh this should not happen作为捕获组。