2010-08-31 80 views
2

我想匹配的字符串看起来是这样的:贪婪正则表达式匹配

<$Fexample text in here>> 

这个表达式:

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

然而,也有一些情况下,我的反向引用的内容包括“>”,因此这样的事情:

<$Fexample text in here <em>>> 

只在反向引用匹配example text in here <em。我需要做些什么才能有条件地返回有或没有这些html实体的正确backrefernce?

回答

5

您可以在正则表达式添加开始和结束锚为:

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

是的,你是35秒加快+1投票 – Bart 2010-08-31 06:24:22

+0

我不知道你是否可以从这个问题中得到这个结果,否则就丢掉?就足够了 – CurtainDog 2010-08-31 06:37:24

+0

我忘记提到锚的缺席是故意的。该字符串可能出现在该行的任何位置。 – 2010-08-31 09:52:11

3

尝试

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

(?!>)力量只有最后>>>>>..>>>长序列将被匹配。


编辑:

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

也有效。

+0

如果你想知道,这是负面的前瞻。请参阅:[Lookaround](http://www.regular-expressions.info/lookaround.html) – NullUserException 2010-08-31 06:24:24

+0

+1:但我认为<\$F(.+?)>> +会更高效,因为没有回溯。 – CurtainDog 2010-08-31 06:35:21

+0

@帘:但那么多余的'>'不会在捕捉组中。 – kennytm 2010-08-31 06:38:49

0

请注意,不是恩真正做什么(我觉得)你想干什么,你将不得不解释合式支架表达式,这在一般语言中是不可能的。

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