我首先想到的是this answer将完全解决我的问题,但它没有。
我有一个像这样的字符串网址:
http://www.someurl.com/some-text-1-0-1-0-some-other-text.htm#id_76
我想提取
some-other-text
所以基本上,我带有以下正则表达式:/0-(.*)\.htm/
不幸的是,这匹配
1-0-some-other-text
因为正则表达式是贪婪的。我无法成功使用 .*?
使其变得非贪婪,正如你所看到的,它不会改变任何东西 here .我也试过
U
修饰符,但它没有帮助。为什么“非贪婪”提示不起作用?
最佳答案
如果您需要获得最接近的匹配,您可以使用 tempered greedy token .
0-((?:(?!0-).)*)\.htm
见 demo
正则表达式的惰性版本不起作用,因为正则表达式引擎从左到右分析字符串。它总是得到最左边的位置并检查它是否可以匹配。因此,就您而言,它找到了第一个
0-
并且很高兴。懒惰适用于最右边的位置。在您的情况下,最右边有 1 个可能的位置,因此,延迟匹配无法帮助实现预期结果。你也可以使用
0-((?!.*?0-).*)\.htm
如果您有单独的字符串可以从中提取值,它将起作用。
关于regex - 最小可能的匹配/非贪婪正则表达式搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31775260/