首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何排除第一组的单个字符与第二组的匹配?

如何排除第一组的单个字符与第二组的匹配?
EN

Stack Overflow用户
提问于 2017-01-09 11:11:04
回答 2查看 2.5K关注 0票数 4

我希望构建与重复单个字符模式相匹配的Q正则表达式,然后是彼此之间的匹配。例如,三次相同的字符'A‘,然后两次另一个字符'B’。如果第二组的角色被重复超过两次并不重要。例如,它应该与字符串wuzDDDFFFxji匹配。

代码语言:javascript
复制
Full match  3-8 `DDDFF`
Group 1.    3-4 `D`
Group 2.    6-7 `F`

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

代码语言:javascript
复制
(.)\1{2}(.)\2{1}

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

代码语言:javascript
复制
Full match  5-10    `QQQQQ`
Group 1.    5-6 `Q`
Group 2.    8-9 `Q`

这与我想要的不匹配,但我无法找到正确的语法来排除特定组在另一个组中的匹配。我最近的尝试似乎不起作用

代码语言:javascript
复制
(.)\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)

这里有什么线索吗?非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-09 11:21:37

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

代码语言:javascript
复制
(.)\1{2}((?!\1).)\2
         ^^^^^^

regex演示

(?!\1)负面展望将“限制”.模式只匹配与第1组匹配的字符。

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

票数 4
EN

Stack Overflow用户

发布于 2017-01-09 11:22:15

我建议使用“1没有遵循\1”的模式:

代码语言:javascript
复制
(.)\1+(?!\1)(.)\2+

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41546687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档