2017-04-02 100 views
1

我试图找到一个正则表达式,匹配不超过n个连续的,比如三个,例如,一个字符的出现;在三个字符的情况下是“a”:
abbaa - matches;
ammaaa - 不匹配(连续三个a),有一个“a”,但整个表达式必须丢弃,因为三个“a”正则表达式,匹配不超过n次发生

谢谢。

+0

你尝试过什么?您使用的是哪种正则表达式引擎? –

+0

阅读一些教程,并在regex101上进行试验。 –

回答

1

您可以指定一个字符,也可以将其推广到所有字符。
此外,不知道如果你想测试或匹配整个字符串,但假设
它是整个字符串。

广义

^(?:(\w)(?!\1{2})|\W)+$

解释

^      # Beginning of string 
(?:      # Cluster 
     (\w)     # (1), a word character 
     (?! \1{2})    # Not 2 more of same in a sequence 
    |      # or, 
     \W      # Not a word character 
)+      # End Cluster, 1 to many times 
$      # End of string 

您可以通过更换你想要的东西替换特定的字符,而不是\w\W

字符示例a它将是a[^a]

^(?:(a)(?!\1{2})|[^a])+$

或多个像[abc][^abc]

^(?:([abc])(?!\1{2})|[^abc])+$

+0

不知道如何去指定字符的正则表达式... –

+0

@TomaszMadry - 添加了特定字符的更新注释。 – sln

+0

谢谢,似乎是这样:) –

1

使用{m,n}语法(如果你的环境提供了它,它可能确实

{m,n}允许前一个字符的mn(含)出现

例子:。

/a{0,3}/比赛0至3次出现a

/a{3,}/匹配3个或更多出现ES。

/a{3}/恰好匹配3次。

在下面的例子中,我成对上述语法与负先行负回顾后

(?<!a)a{0,3}(?!a)匹配0至3次出现的a,其中0-3次出现之前或之后没有a

+0

但是第一个例子/ a {0,3} /也匹配,比如说:xxaaaad; https://开头regex101。com/r/f54igA/1 –

+0

正确的是,如果你想要我规定确切的解决方案,你必须更具体地与你想要的匹配。你会使用我提到的语法来构建你想要的任何正则表达式。另见我的更新答案。 – jakeehoffmann

+0

让我知道,如果最后一个例子是你在找什么。我很乐意进一步讨论并编辑我的问题。正则表达式很有趣。 – jakeehoffmann