regex - 如何排除第一组的单个字符被匹配到第二组?

标签 regex regex-negation regex-group

我想构建 q 正则表达式来匹配重复的单个字符的模式,然后是彼此。
例如,三个相同的字符“A”,然后是另一个字符“B”的两次。第二组的字符重复两次以上没有关系。
例如它应该匹配字符串 wuzDDDFFFxji

Full match  3-8 `DDDFF`
Group 1.    3-4 `D`
Group 2.    6-7 `F`

我想出了以下正则表达式,但有一个限制。
(.)\1{2}(.)\2{1}

它几乎可以工作,但不会排除第一组的字符在第二组中匹配。字符串 qwuiuQQQQQQsas 将匹配,因为:
Full match  5-10    `QQQQQ`
Group 1.    5-6 `Q`
Group 2.    8-9 `Q`

这与我想要的不匹配,但我找不到正确的语法来排除特定组与另一个组的匹配。我最近的尝试似乎不起作用
(.)\1{2}((?:\1))\2{1}


1st Capturing Group (.)
. matches any character (except for line terminators)
\1{2} matches the same text as most recently matched by the 1st capturing group
{2} Quantifier — Matches exactly 2 times
2nd Capturing Group ((?:\1))
Non-capturing group (?:\1)
\1 matches the same text as most recently matched by the 1st capturing group
\2{1} matches the same text as most recently matched by the 2nd capturing group
{1} Quantifier — Matches exactly one time (meaningless quantifier)

这里有什么提示吗?非常感谢!

最佳答案

避免匹配 qwuiuQQQQQsas您需要使用负前瞻而不是非捕获组:

(.)\1{2}((?!\1).)\2
         ^^^^^^

the regex demo .
(?!\1)负前瞻将“限制”.模式只匹配除第 1 组中匹配的字符以外的字符。

非捕获组不限制任何模式,但仅用于对仍然消耗文本的子模式进行分组,而前瞻(零宽度断言)不消耗文本,只检查字符串中是否存在与该模式相匹配的文本.

关于regex - 如何排除第一组的单个字符被匹配到第二组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41546687/

相关文章:

java - 在文本文件中搜索特定文本行

ruby-on-rails - Rails 格式验证——字母数字,但不是纯数字

正则表达式:匹配模式但排除一种情况

python-2.7 - 除了字符集之外的 Python 正则表达式匹配

javascript - 如何替换所选正则表达式的最后一个字符?

Javascript 正则表达式有异常

java - 需要转义 java 中 XML 标签(<、>、')之间存在的一些特殊字符

python - 需要此正则表达式的帮助

javascript - 正则表达式优化和最佳实践

使用模式匹配器的 Java 正则表达式未正确返回?