2017-04-02 50 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