【发布时间】:2014-07-18 02:42:44
【问题描述】:
考虑一下这段文字:100 dollars
如果我想匹配100(使用前瞻),我写了这个:
\d{3}(?= dollars)
据我所知,该模式的意思是:仅当(如果)后面跟着" dollars"
但是可以以一种奇怪的方式使用前瞻;再次匹配上述文本中的100:
(?=\d{3} dollars).{3}
这怎么可能?我们如何解释前瞻的第二种用法?
【问题讨论】:
标签: regex lookaround
考虑一下这段文字:100 dollars
如果我想匹配100(使用前瞻),我写了这个:
\d{3}(?= dollars)
据我所知,该模式的意思是:仅当(如果)后面跟着" dollars"
但是可以以一种奇怪的方式使用前瞻;再次匹配上述文本中的100:
(?=\d{3} dollars).{3}
这怎么可能?我们如何解释前瞻的第二种用法?
【问题讨论】:
标签: regex lookaround
请记住,环视是零宽度断言。这意味着它们在匹配时不会消耗字符。它们基本上是对字符串中给定点的检查。在第二个正则表达式中,引擎首先检查字符串中的特定点是否与环顾内的模式匹配,如果匹配,则这次通过消耗字符(.{3})从该位置继续匹配。
【讨论】:
^ 和 $)和字边界(\b)。
.{3})
ac 匹配 (?=a(v|c))(?=a(c|b)). 但 av 不匹配。