2017-01-09 41 views
2

我需要確保指定字符(@)連續重複不超過一次。它可以發生多次,但僅作爲單個@字符,而不是@@或更多。捕獲組是不必要的。匹配連續不超過@個字符的字符串

這些字符串應該匹配:

foobar 
@foobar 
[email protected] 
[email protected]@baz 

這些字符串不應該匹配:

@@foobar 
[email protected]@bar 
[email protected]@@baz 

該引擎支持向前看符號和lookbehinds。

我已經試過用(?<[email protected])@([email protected])這樣做了1次重複,但是((?<[email protected])@([email protected])|)(?<[email protected])@?([email protected])顯然不會按照0或1次重​​復的意圖工作。

這種情況怎麼處理?

+0

如果一行沒有任何@字符怎麼辦?它應該匹配還是不匹配? –

+1

@ S.Imp它應該。這種情況列在*這些字符串應該匹配*。 – estus

+3

堆棧溢出不是免費的爲您創建正則表達式的諮詢。你嘗試了什麼,它是怎麼出錯的,你做了什麼來嘗試解決這個問題? –

回答

5

沒有任何先行的支持,你可以使用這個否定的字符類的正則表達式:

^[^@]*(?:@[^@]+)*$ 

[^@]匹配任何不@

RegEx Demo

如果在您的正則表達式有前瞻的支持,然後使用一個簡單的正則表達式:

^(?!.*@@).*$ 

哪裏(?!.*@@)爲負正則表達式字符串不允許@@任何地方。

RegEx Demo 2

+1

優秀。非常感謝。 – estus