繁体   English   中英

仅当一个字符在匹配中出现n次时如何匹配?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM