如何排除第一组的单个字符被匹配到第二组?
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`
我想出了以下正则表达式,但有一个限制。
(.){2}(.){1}
它几乎可以工作,但它不会将第一组的字符排除在第二组的匹配之外。字符串 qwuiuQQQQQsas 将被匹配,因为:
Full match 5-10 `QQQQQ`
Group 1. 5-6 `Q`
Group 2. 8-9 `Q`
这与我想要的不符,但我找不到正确的语法来排除特定组与另一个组的匹配。我最近的尝试似乎没有用
(.){2}((?:)){1}
1st Capturing Group (.)
. matches any character (except for line terminators)
{2} matches the same text as most recently matched by the 1st capturing group
{2} Quantifier — Matches exactly 2 times
2nd Capturing Group ((?:))
Non-capturing group (?:)
matches the same text as most recently matched by the 1st capturing group
{1} matches the same text as most recently matched by the 2nd capturing group
{1} Quantifier — Matches exactly one time (meaningless quantifier)
这里有什么提示吗?非常感谢!
为了避免匹配 qwuiuQQQQQsas
,您需要使用否定先行而不是非捕获组:
(.){2}((?!).)
^^^^^^
(?!)
否定前瞻将 "restrict" .
模式仅匹配第 1 组中匹配以外的字符。
非捕获组不限制任何模式,但仅用于对仍使用文本的子模式进行分组,并且先行(零宽度断言)不使用文本并且仅检查是否存在符合该模式的文本是否在字符串中。
我建议使用“\1 后跟 \1”模式:
(.)+(?!)(.)+
我想构建 q 个正则表达式来匹配重复的单个字符的模式,然后是彼此。 例如,同一个字符 'A' 出现三次,后跟另一个字符 'B' 两次。第二组的字符重复两次以上也没关系。 例如它应该匹配字符串 wuzDDDFFFxji
Full match 3-8 `DDDFF`
Group 1. 3-4 `D`
Group 2. 6-7 `F`
我想出了以下正则表达式,但有一个限制。
(.){2}(.){1}
它几乎可以工作,但它不会将第一组的字符排除在第二组的匹配之外。字符串 qwuiuQQQQQsas 将被匹配,因为:
Full match 5-10 `QQQQQ`
Group 1. 5-6 `Q`
Group 2. 8-9 `Q`
这与我想要的不符,但我找不到正确的语法来排除特定组与另一个组的匹配。我最近的尝试似乎没有用
(.){2}((?:)){1}
1st Capturing Group (.)
. matches any character (except for line terminators)
{2} matches the same text as most recently matched by the 1st capturing group
{2} Quantifier — Matches exactly 2 times
2nd Capturing Group ((?:))
Non-capturing group (?:)
matches the same text as most recently matched by the 1st capturing group
{1} matches the same text as most recently matched by the 2nd capturing group
{1} Quantifier — Matches exactly one time (meaningless quantifier)
这里有什么提示吗?非常感谢!
为了避免匹配 qwuiuQQQQQsas
,您需要使用否定先行而不是非捕获组:
(.){2}((?!).)
^^^^^^
(?!)
否定前瞻将 "restrict" .
模式仅匹配第 1 组中匹配以外的字符。
非捕获组不限制任何模式,但仅用于对仍使用文本的子模式进行分组,并且先行(零宽度断言)不使用文本并且仅检查是否存在符合该模式的文本是否在字符串中。
我建议使用“\1 后跟 \1”模式:
(.)+(?!)(.)+