2010-10-17 16 views
2

給定一個字符串,我該如何表達一個模式必須使用AND運算符匹配多個正則表達式?例如,我希望密碼最少爲5個字符,最多12個字符。AND運算符在正則表達式中?

  • 正則表達式mimimum 5個字符: .{5,}
  • 正則表達式最多12個字符:.{12}

我知道我可以在上述兩個結合起來,這樣的事情:.{5,12},但這不是什麼我正在努力實現。我想要「和」這兩個正則表達式。

+0

據我所知,在(大多數/所有?)應用,這無法做到的(對容易組合的要求保存在你的例子),你會只必須遍歷所有必需的正則表達式來檢查它們是否全部匹配。 – Wrikken 2010-10-17 22:31:35

+0

你的意思是你不想選擇,但5或12,沒有什麼在兩者之間? AFAIK - {5,12}應該滿足您的需求,如果它介於兩者之間的話。 – Duniyadnd 2010-10-17 22:34:27

+0

你確定你可以做{,12}嗎? – Max 2010-10-17 22:48:43

回答

3

好吧99%的時間,你要麼將它們結合在母語中,例如。

if (Regex.Match(input,pattern1) && Regex.Match(input,pattern2)) 
{ 
    //do work 
} 

或改進正則表達式來組合它們,例如。

.{5,12} 

如果你真的想要一個單一的正則表達式中組合,您可以用向前看的斷言,這樣的事情,但實際匹配的值不會是你所期望的東西。

^(?=.{5,})(?=.{0,12}) 
+1

你的第二個正則表達式也匹配超過12個字符的字符串。 – 2010-10-17 22:36:48

+0

@colin,是的,但這是原始正則表達式中的一個缺陷,而不是它們的組合! '^。{,12} $'當然會起作用。 – 2010-10-17 22:44:24

+2

和正則表達式的第二部分是無效的。 '{,12}'不可用。 – 2010-10-17 22:47:48

1

這兩個源代碼正則表達式是錯誤的。無論如何,你想要.{5,12}

+0

糟糕,你是對的。將編輯。 – StackOverflowNewbie 2010-10-17 22:38:01

1

如果你想在一個字符串檢查多個模式,您可以使用look-around

/^(?=.{5}).{0,12}$/ 

這樣你檢查你的字符串是至少5個字符,也是最多12個字符。

但正如你所說,在這種情況下,最好將它們中的兩個組合在.{5,12}中。

+0

起初我以爲你應該爲第二部分做{0,7},但你的回答是正確的。+1 – Max 2010-10-17 23:00:30

1

在正則表達式本身中沒有簡單的方法來做到這一點。我知道的正則表達式交集算法要求您先將正則表達式轉換爲自動機。

就你而言,最好的解決方案可能是創建一個結合了兩個正則表達式的AndRegex類。

0

如果你只是想匹配5個字符的最小值和最大值12,爲什麼即使打擾正則表達式?您可以使用您的語言支持的任何函數來計算字符串中的字符數。使用len()

>>> s="mypassword" 
>>> if len(s) >=5 and len(s) <=12 : 
... print s 
... 
mypassword 

使用Ruby如Python的

>> s="mypassword" 
=> "mypassword" 
>> s.size >= 5 and s.size<=12 
=> true