[英]How to match only if a character occurs n times inside the match?
https://regex101.com/r/gNNlKM/2
我想匹配START:test:test:test:asd:xxx:yyy:zzz:12345:END
,但是,仅当:
出现4次或更多次。
通常,可以使用以下命令: (START.*?)\\d+(:END)
但是如何进入:{4,}
?
匹配的字符串可能会重复多次。 像: START:test:test:test:asd:xxx:yyy:zzz:12345:END...START:test:test:test:asd:xxx:yyy:zzz:12345:END...
重要的是:{4,}
匹配仅应用于每个START-END
令牌内。
旁注:我在这里使用匹配组,因为以后我想在特殊情况下删除数字。 但这与如何获得n次比赛无关紧要。
您可以这样编写正则表达式,
(START(?:(?:(?!START)[^:])*:){3,})\d+(:END)
仅在字符串中包含:
4次时,这将匹配。
说明:
(START
启动捕获组并按字面上匹配START
(?:(?:(?!START)[^:])*:){3,})
-这个匹配一些可选的文本,并拒绝如果看到字面匹配START
和后跟:
其中{3,}
意味着三或更多次。 \\d+
-匹配一个或多个数字 (:END)
-再匹配一个:
并按字面意义将END
捕获到group2中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.