我首先认为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
修饰符,但它没有帮助。
为什么" nongreedy"提示不起作用?
答案 0 :(得分:3)
如果您需要获得最接近的匹配,可以使用tempered greedy token。
0-((?:(?!0-).)*)\.htm
请参阅demo
正则表达式的惰性版本不起作用,因为正则表达式引擎从左到右分析字符串。它始终处于最左侧位置并检查它是否匹配。所以,在你的情况下,它找到了第一个0-
,并对此感到满意。懒惰适用于最右边的位置。在您的情况下,有一个可能的最右侧位置,因此,懒惰匹配无法帮助实现预期的结果。
您也可以使用
0-((?!.*?0-).*)\.htm
如果您有单独的字符串从中提取值,它将起作用。
答案 1 :(得分:0)