考虑这个文字: 100 dollars
如果我想匹配100
(使用lookahead),我写道:
\d{3}(?= dollars)
Run Code Online (Sandbox Code Playgroud)
据我所知,该模式意味着:只有当(如果)后面跟着时,才能找到3位数 " dollars"
但是前瞻可以奇怪的方式使用; 再次匹配100
上述文字:
(?=\d{3} dollars).{3}
Run Code Online (Sandbox Code Playgroud)
这怎么可能?我们如何解释第二次使用前瞻?
请记住,环视是零宽度断言。这意味着它们在匹配时不会消耗字符。它们基本上是从字符串中给定点开始的检查。在第二个正则表达式中,引擎首先检查字符串中的特定点是否与环视内的模式匹配,如果是,则这次通过消耗字符 ( .{3}
) 从该位置继续匹配。