regex - 最小可能的匹配/非贪婪正则表达式搜索

标签 regex regex-greedy non-greedy

我首先想到的是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/

相关文章:

javascript - 如何编写正则表达式从 URL 获取参数

javascript - 按十六进制颜色分割字符串

javascript - 在哪里可以找到 Javascript 的 `string.replace(RegExp, function)` 方法的文档?

regex - .* 和有什么不一样?和 .* 正则表达式?

正则表达式匹配以 x 开头、以 y 结尾并包含 z 但中间不包含 x 的多行字符串

php - 用字符串中的同义词替换单词

javascript - 使用正则表达式查找末尾不包括组的所有字符

php - 正则表达式,贪婪 |

javascript - 用于在先行后匹配多个出现的正则表达式

javascript - 非贪婪地隔 ionic 字符串?