给定一个输入字符串fooxxxxxxfooxxxboo
我正在尝试编写一个匹配的正则表达式fooxxxboo
即从第二个 foo 开始直到最后一个 boo。
我尝试了以下方法
foo.*?boo
匹配完整的字符串fooxxxxxxfooxxxboo
foo.*boo
也匹配完整的字符串fooxxxxxxfooxxxboo
我读了这个贪婪、不情愿、占有量词 https://stackoverflow.com/questions/5319840/greedy-vs-reluctant-vs-possessive-quantifiers/5319978#5319978我理解它们的区别,但我试图匹配末尾最短的字符串,该字符串与正则表达式匹配,即类似要从后面求值的正则表达式。
有什么办法可以只匹配最后一部分吗?
Use 否定前瞻断言 http://www.regular-expressions.info/lookaround.html.
foo(?:(?!foo).)*?boo
DEMO https://regex101.com/r/nL5yL3/8
(?:(?!foo).)*?
- 任何字符的非贪婪匹配,但不是foo
零次或多次。也就是说,在匹配每个字符之前,它会检查该字符是否不是字母f
随后是两个o
的。如果是,则只匹配对应的字符。
为什么使用正则表达式foo.*?boo
匹配完整的字符串fooxxxxxxfooxxxboo
?
因为第一个foo
在你的正则表达式中匹配foo
字符串和以下内容.*?
将对字符串进行非贪婪匹配boo
,所以我们有两个匹配fooxxxxxxfooxxxboo
and fooxxxboo
。由于第二个匹配项出现在第一个匹配项中,因此正则表达式引擎仅显示第一个匹配项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)