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
token 内。
旁注:我在这里使用匹配组,因为稍后我想删除这种特殊情况下的数字。但这对于如何进入n次匹配的问题来说应该不重要。
最佳答案
你可以这样写你的正则表达式,
(START(?:(?:(?!START)[^:])*:){3,})\d+(:END)
仅当 :
时才会匹配恰好包含在字符串中 4 次。
说明:
-
(START
- 启动捕获组并匹配START
从字面上看 -
(?:(?:(?!START)[^:])*:){3,})
- 这会匹配一些可选文本,如果看到文字START
则拒绝匹配然后是:
哪里{3,}
意思是三次或三次以上。 -
\d+
- 匹配一个或多个数字 -
(:END)
- 再匹配一个:
和END
从字面上看并在 group2 中捕获它
<强> Demo
关于java - 如何仅当某个字符在匹配中出现 n 次时才匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54515814/