正则表达式:比赛之前/之后

wik*_*iki 5 regex lookaround

考虑这个文字: 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)

这怎么可能?我们如何解释第二次使用前瞻?

Far*_*ori 2

请记住,环视是零宽度断言。这意味着它们在匹配时不会消耗字符。它们基本上是从字符串中给定点开始的检查。在第二个正则表达式中,引擎首先检查字符串中的特定点是否与环视内的模式匹配,如果是,则这次通过消耗字符 ( .{3}) 从该位置继续匹配。