2012-02-13 746 views
-1

如何在單個正則表達式中表達這些規則?正則表達式不允許連續重複相同的字符

  1. 比一個字符的兩個重複更是無效的下面相互字符
  2. 兩個重複直接無效(aabcc是有效的,oott不是)
+4

這些日子裏人們很快就會失望,他們並沒有削減你對新人的任何懈怠。總是試圖至少嘗試一次,如果你不能得到它,然後張貼你試過的東西,人們會幫助你糾正錯誤,或者指引你朝着更好的方向發展。 – Brian 2012-02-13 14:53:04

回答

0

您可以使用/([a-z])\1/gi檢查重複的字符,然後檢查匹配的數量。如果它大於1,則有多個重複字符。

+0

這不區分'aabcc'和'oott'。 – 2012-02-13 15:58:02

1

有趣的問題,你不給你的語言,但假設它支持向前看符號,你可以試試這個:

^(?!.*(.)\1{2})(?!.*(.)\2(.)\3).+$ 

看到它here on Regexr

有兩個部分,第一部分^.+$任何比賽字符從字符串開始直到結尾,因爲+至少需要一個字符。

第二部分是否定的lookaheads。他們定義了一組規則,完整的正則表達式只要其中一個匹配就會失敗。

(?!.*(.)\1{2})在連續3個相等的字符上失敗。

(?!.*(.)\2(.)\3)失敗上第二個條件「字符的兩個重複以下彼此直接地」

\1(23)反向引用到前括號內的部分。

+0

+1(當然,除了Regexr上的可視化,你實際上並不需要'。+ $'部分)。 – 2012-02-13 16:01:04

相關問題