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

时间:2019-02-04 12:10:25

标签: java regex

https://regex101.com/r/gNNlKM/2

我想匹配multiprocessing,但前提是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,}令牌内部。

旁注:我在这里使用匹配组,因为后来我想在特殊情况下删除数字。但这与如何获得n次比赛无关。

1 个答案:

答案 0 :(得分:3)

您可以这样编写正则表达式,

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

仅当:被正确包含在字符串中4次时,此匹配。

说明:

  • (START-启动捕获组并从字面上匹配START
  • (?:(?:(?!START)[^:])*:){3,})-这匹配一些可选文本,并且在看到文字START且后跟:时拒绝匹配,其中{3,}表示3次或更多次。
  • \d+-匹配一个或多个数字
  • (:END)-从字面上匹配另外一个:END并将其捕获到group2中

Demo