如何匹配只有一个字符出现n次的比赛里?

问题描述 投票:0回答:1

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单词内应用。

旁注:我使用的是匹配的组这里我lateron要删除的数字在这种特殊情况。但是,这不应该的问题的问题,如何获得n次比赛之中。

java regex
1个回答
3
投票

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

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

如果:包含字符串正好是4倍,这将只匹配。

说明:

  • (START - 启动捕获组和字面匹配START
  • (?:(?:(?!START)[^:])*:){3,}) - 这符合一些可选的文本,并拒绝如果看到文字START和随后:比赛,其中{3,}指三次以上。
  • \d+ - 匹配一个或多个数字
  • (:END) - 匹配一个更:END字面上并捕获它在第2组

Demo

© www.soinside.com 2019 - 2024. All rights reserved.