在字符串结束之前使用正则表达式匹配一个或多个 0 符号



假设我们有一些字符串看起来像这样:ABCDEFGH000000(最后的零数量可能会有所不同(。我们需要在行尾与正则表达式匹配这个"0"符号。

当我写类似/(^.*)(0+$)/的东西时,我只匹配最后一个"0"符号。但是如果我写这样的东西/^(.*)(0{6,})/我就匹配我的六个零。问题是 - 我可以有超过 6 个零(或小于 6(,所以{6,}不能使用。

如何在字符串末尾正确匹配所有连贯的"0"符号?我使用 PCRE

UPD 我必须捕获匹配的结果(零和非零(

原因是*是贪婪的,所以.*匹配的最长的字符串,仍然允许正则表达式的其余部分匹配。由于0+只用一个0就成功了,.*可以匹配之前的所有角色,包括所有其他0角色。

使用非贪婪量词来匹配0之前的部分:

/(^.*?)(0+$)/

/0+$/

正则表达式尝试进行最长的匹配,因此在第一种情况下,.* 会吃掉除最后一个需要的零之外的所有零。

为了节省可能耗时的惰性正则表达式,正则表达式匹配/捕获可以简化为 (0+($ 和 $$1, respectively. Where supported, $在匹配之前捕获字符串。

最新更新