正则表达式:贪婪地匹配某些模式~-11或~6等?



我有一些具有以下模式的文本

~,以及可选的 a - 然后是一些数字

所以我可以有(可以成为一些更大文本的一部分)

~7
~-6
~-11534
~-0

例如,我的文本可以是:

New Zealand~1 expenditure~-900 

现在我正在使用这种模式:

[~-]*[0-9]*[0-9]

它似乎可以完成工作,但我知道 [0-9]*[0-9] 是贪婪匹配(0 到无限次)

我想知道是否有更好的模式?

编辑:实际上,为了更好地满足您的要求,我建议

~-?[0-9]+

通过这种方式,我们指定~必需的,并且可以后跟-和数字。
量词后面的问号说尽可能少地取,使其不贪婪,但在当前示例中是不必要的

编辑2:我最近注意到数字并不完全可选,并将"零或多个"量词*更改为"一个或多个"量词+

编辑3:谈论"贪婪"和"不贪婪"。非贪婪算法将返回尽可能少的算法,如果字符串末尾有多个数字,它将只包含第一个数字到结果中,这不是您要查找的。

更多关于贪婪和非贪婪算法的信息,感谢Wiktor Stribiżew的出色解释:

模式末尾的惰性量词将匹配 0(如果使用 *?)或 1(如果使用 +?)字符。发生这种情况是因为延迟量化模式只抓取它们必须首先匹配的内容(最小出现次数)并被跳过,以便可以检查后续模式。只有当不匹配时,引擎才会返回到延迟量化的子模式,以将其再扩展一个字符并重试。

最新更新