我想构建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)
这里有任何暗示吗?非常感谢你!
答案 0 :(得分:3)
为避免匹配qwuiuQQQQQsas
,您需要使用否定前瞻而非非捕获组:
(.)\1{2}((?!\1).)\2
^^^^^^
请参阅the regex demo。
(?!\1)
否定前瞻将“限制”.
模式仅匹配与第1组匹配的字符以外的字符。
非捕获组不限制任何模式,但仅用于对仍然使用文本的子模式进行分组,并且前瞻(零宽度断言)不使用文本,仅检查符合其模式的文本是否存在于字符串与否。
答案 1 :(得分:2)