如果一个字符在匹配中出现n次,如何匹配?

f45qwnt8  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(280)

https://regex101.com/r/gnnlkm/2
我想要匹配 START:test:test:test:asd::yyy:zzz:12345:END ,但前提是 : 发生4次或更多次。
一般来说,以下工作: (START.*?)\d+(:END) 但我怎样才能 :{4,} 进入?
匹配的字符串可能会重复多次。比如: START:test:test:test:asd::yyy:zzz:12345:END...START:test:test:test:asd::yyy:zzz:12345:END... 重要的是 :{4,} 匹配只应用于每个 START-END 代币。
旁注:我在这里使用匹配组,因为我稍后想删除那个特殊情况下的数字。但这对于如何让n次比赛进入决赛并不重要。

ca1c2owp

ca1c2owp1#

你可以这样写正则表达式,

(START(?:(?:(?!START)[^:])*:){3,})\d+(:END)

只有在 : 正好包含在字符串中4次。
说明: (START -启动捕获组并匹配 START 真的吗 (?:(?:(?!START)[^:])*:){3,}) -这将匹配一些可选文本,如果看到文本,则拒绝匹配 START 然后是 : 哪里 {3,} 指三次或三次以上。 \d+ -匹配一个或多个数字 (:END) -再匹配一个 : 以及 END 并在第2组中捕获
演示

相关问题