[当我在正则表达式中学习断言时,我的朋友给了我一个模式/one(?=two)three/
请我找到与之匹配的有效字符串。但是,似乎不可能找到这样的字符串。 “ onetwothree”无效。我尝试解释一下,(?=xxx)
没有实际字符,因此该模式不匹配。但这仍然令人困惑。希望有人可以对其进行彻底验证。 :-)
摘要:正则表达式确实是
onethree
^
(?=two)
^
指向插入(?=two)
作为检查的位置。因为向前看是three
,所以它永远不会是two
并且整个正则表达式将始终fail。
将正则表达式更改为one(?=two).*?three
将匹配onetwothree
我建议使用站点https://regex101.com,该站点可以播放和测试正则表达式,并为您提供有关正则表达式如何工作的非常详细的说明。
您的正则表达式将始终失败,因为不可能同时匹配两个和三个。您可以在此regex调试器的屏幕快照中看到,它测试了“两个”的正向查找后,它从两个开头的位置再次开始匹配,然后尝试匹配三个,这失败了。
通过regex101调试器显示的正则表达式匹配的动画记录: