首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >匹配不包含x个连续字符的字符串的正则表达式是什么?

匹配不包含x个连续字符的字符串的正则表达式是什么?
EN

Stack Overflow用户
提问于 2016-10-05 17:01:50
回答 3查看 5.2K关注 0票数 0

我希望匹配不包含一行中重复的相同字符中的3个以上的字符串。所以:

  • abaaaa没有对手
  • abawdasd匹配
  • abbbbasda没有匹配
  • bbabbabba火柴

是的,如果对包含连续字符的正则表达式进行匹配,然后在随后的代码中否定这一点,就会更容易、更整洁。然而,在这种情况下,这是不可能的。

我想把这个问题扩展到x个连续字符,这样就可以扩展到一般情况下,使问题和答案更加有用。

在这种情况下,支持负前瞻性。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-05 19:41:23

使用带反向引用的负前瞻:

代码语言:javascript
复制
^(?:(.)(?!\1\1))*$

请参见使用示例的现场演示

(.)捕获组1中的每个字符,而前面的负面展望表明,接下来的2个字符不会重复捕获的字符。

票数 5
EN

Stack Overflow用户

发布于 2016-10-05 17:01:50

若要匹配不包含连续重复3次以上的字符的字符串:

^((.)\2?(?!\2\2))+$

它的工作原理:

代码语言:javascript
复制
^            Start of string
(
  (.)        Match any character (not a new line) and store it for back reference.
    \2?      Optionally match one more exact copies of that character.
    (?!      Make sure the upcoming character(s) is/are not the same character.
      \2\2   Repeat '\2' for as many times as you need
    )
)+           Do ad nauseam
$            End of string

因此,整个表达式中的/2数将是允许一个字符连续重复的次数,并且不会得到匹配。

例如。

  • ^((.)\2?(?!\2\2\2))+$将匹配不连续重复字符超过4次的所有字符串。
  • ^((.)\2?(?!\2\2\2\2))+$将匹配不连续重复字符超过5次的所有字符串。

请注意,此解决方案使用的是负面展望,但并非所有regex风格都支持它。

票数 0
EN

Stack Overflow用户

发布于 2019-12-10 22:46:43

我在回答这个问题:

是否有用于匹配不超过2个重复字符的字符串的正则表达式?

被标记为这个问题的确切副本。

相反,否定比赛要快得多。

代码语言:javascript
复制
if (!Regex.Match("hello world", @"(.)\1{2}").Success) Console.WriteLine("No dups");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39879853

复制
相关文章

相似问题

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