java - 如何仅当某个字符在匹配中出现 n 次时才匹配?

标签 java regex

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/

相关文章:

c++ - C++ 中的 Regex 语句未按预期工作

Java replaceAll 从空行中删除空格

Java正则表达式 "-[0-9]{0,}"似乎匹配 "-abc"

java - 多线程应用程序中的 NTLM 身份验证失败

java - 带有来自特殊 HashMap 的图像的 Android ListView

java - 双组-Cookie : PHPSESSID in http response

java - OpenShift 在线 - 构建时内存不足

java - 忽略Java中的大写和小写

json - 有没有更快的方法来解析 Java 中有效整数的字符串?

正则表达式:抓取引号之间的值