假设我们有一些字符串看起来像这样:ABCDEFGH000000
(最后的零数量可能会有所不同(。我们需要在行尾与正则表达式匹配这个"0"符号。
当我写类似/(^.*)(0+$)/
的东西时,我只匹配最后一个"0"符号。但是如果我写这样的东西/^(.*)(0{6,})/
我就匹配我的六个零。问题是 - 我可以有超过 6 个零(或小于 6(,所以{6,}
不能使用。
如何在字符串末尾正确匹配所有连贯的"0"符号?我使用 PCRE
UPD 我必须捕获匹配的结果(零和非零(
原因是*
是贪婪的,所以.*
匹配的最长的字符串,仍然允许正则表达式的其余部分匹配。由于0+
只用一个0
就成功了,.*
可以匹配之前的所有角色,包括所有其他0
角色。
使用非贪婪量词来匹配0
之前的部分:
/(^.*?)(0+$)/
/0+$/
正则表达式尝试进行最长的匹配,因此在第一种情况下,.* 会吃掉除最后一个需要的零之外的所有零。
为了节省可能耗时的惰性正则表达式,正则表达式匹配/捕获可以简化为 (0+($ 和 $$1, respectively. Where supported, $
在匹配之前捕获字符串。