在正则表达式中找不到正向前瞻 (?=pattern) 示例的匹配项
Cannot find a match for a positive lookforward (?=pattern) example in regex
当我在正则表达式中学习断言时,我的朋友给了我一个模式
/one(?=two)three/
让我找到一个匹配它的有效字符串。但是,似乎不可能找到这样的字符串。 "onetwothree" 无效。我试图解释 (?=xxx)
没有实际字符,所以这个模式没有匹配。但这仍然有点令人困惑。希望有人能彻底验证一下。 :-)
抽象:正则表达式确实是
onethree
^
(?=two)
^
指向插入(?=two)
的位置作为检查
向前看是 three
所以它永远不会是 two
并且整个正则表达式总是 失败 .
将正则表达式更改为 one(?=two).*?three
将匹配 onetwothree
我建议使用站点 https://regex101.com,它允许播放和测试您的正则表达式,并为您提供关于正则表达式如何运行的非常详细的解释。
你的正则表达式总是会失败,因为不可能同时匹配两个和三个。
您可以在这张正则表达式调试器的屏幕截图中看到,在测试 "two" 的正先行后,它再次从两个开始的位置开始匹配并尝试匹配三个,但失败了。
通过 regex101 调试器显示的正则表达式匹配的动画记录:
当我在正则表达式中学习断言时,我的朋友给了我一个模式
/one(?=two)three/
让我找到一个匹配它的有效字符串。但是,似乎不可能找到这样的字符串。 "onetwothree" 无效。我试图解释 (?=xxx)
没有实际字符,所以这个模式没有匹配。但这仍然有点令人困惑。希望有人能彻底验证一下。 :-)
抽象:正则表达式确实是
onethree
^
(?=two)
^
指向插入(?=two)
的位置作为检查
向前看是 three
所以它永远不会是 two
并且整个正则表达式总是 失败 .
将正则表达式更改为 one(?=two).*?three
将匹配 onetwothree
我建议使用站点 https://regex101.com,它允许播放和测试您的正则表达式,并为您提供关于正则表达式如何运行的非常详细的解释。
你的正则表达式总是会失败,因为不可能同时匹配两个和三个。
您可以在这张正则表达式调试器的屏幕截图中看到,在测试 "two" 的正先行后,它再次从两个开始的位置开始匹配并尝试匹配三个,但失败了。
通过 regex101 调试器显示的正则表达式匹配的动画记录: