在组后使用量词时需要有关正则表达式的帮助

need help on regex when using a quantifier after a group

我想匹配任一字符串 - abcabc*abc?abc{abc}。以下 .*?(\?|\*|\{.*?\}) 正则表达式匹配所有以上 abc 除外。即使 .*?(\?|\*|\{.*?\})? 也不行。

如有任何帮助,我们将不胜感激。 (我正在使用 java)

检查以下模式是否有帮助?

演示: https://regex101.com/r/XtEPSe/2

模式:.+?(\?|\*|\{.*?\}|$)|(?:^$)

详情:

  • 已将 .*? 更改为 .+?。为了匹配空字符串,在末尾添加了一个备用 ^$。如果不需要,请删除它。
  • 添加了替代 $ 以匹配 abc
  • 捕获组 1 应该会为您提供所需的字符。

使用 .*? 是可选的,并且组中的所有选项也是可选的,这将匹配多个位置和一个空字符串。

你可以做的是使模式更具体一些,例如单词字符 \w+ 匹配 abc 之前的交替,并使用字符 abc 稍微缩短交替本身=50=] 和花括号一个否定字符 class 来匹配中间的内容。

\w+(?:[*?]|{[^{}]*})?

部分

  • \w+ 匹配 1+ 个单词字符(使用 .*?
  • (?:非捕获组
    • [*?] 匹配 * ?
    • |
    • {[^{}]*} 匹配来自 {..}
  • )?关闭群组并使其可选

看到一个Regex demo