繁体   English   中英

如何将第一组的单个字符排除在第二组之外?

[英]How to exclude first group's single character from being matched into second group?

我想构建q正则表达式,使其匹配重复的单个字符的模式,然后依次匹配。 例如,相同字符“ A”的三倍,然后是另一个字符“ B”的两倍。 第二组的角色重复两次以上并不重要。 例如,它应该匹配字符串wuzDDDFFFxji

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

我提出了以下正则表达式,但有一个限制。

(.)\1{2}(.)\2{1}

它几乎可以工作,但不会在第二组中排除匹配的第一组字符。 由于以下原因,将匹配字符串qwuiuQQQQQsas

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
         ^^^^^^

参见regex演示

(?!\\1)否定的前瞻将“限制” . 模式,仅匹配与第1组匹配的字符以外的字符。

非捕获组不限制任何模式,而是仅用于对仍使用文本的子模式进行分组,而超前(零宽度断言)不使用文本,仅检查字符串中是否存在符合该模式的文本。

我建议使用“ \\ 1而不是\\ 1”模式:

(.)\1+(?!\1)(.)\2+

演示: https : //regex101.com/r/QkqpzS/1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM