給定一個字符串,我該如何表達一個模式必須使用AND運算符匹配多個正則表達式?例如,我希望密碼最少爲5個字符,最多12個字符。AND運算符在正則表達式中?
- 正則表達式mimimum 5個字符:
.{5,}
- 正則表達式最多12個字符:
.{12}
我知道我可以在上述兩個結合起來,這樣的事情:.{5,12}
,但這不是什麼我正在努力實現。我想要「和」這兩個正則表達式。
給定一個字符串,我該如何表達一個模式必須使用AND運算符匹配多個正則表達式?例如,我希望密碼最少爲5個字符,最多12個字符。AND運算符在正則表達式中?
.{5,}
.{12}
我知道我可以在上述兩個結合起來,這樣的事情:.{5,12}
,但這不是什麼我正在努力實現。我想要「和」這兩個正則表達式。
好吧99%的時間,你要麼將它們結合在母語中,例如。
if (Regex.Match(input,pattern1) && Regex.Match(input,pattern2))
{
//do work
}
或改進正則表達式來組合它們,例如。
.{5,12}
如果你真的想要一個單一的正則表達式中組合,您可以用向前看的斷言,這樣的事情,但實際匹配的值不會是你所期望的東西。
^(?=.{5,})(?=.{0,12})
你的第二個正則表達式也匹配超過12個字符的字符串。 – 2010-10-17 22:36:48
@colin,是的,但這是原始正則表達式中的一個缺陷,而不是它們的組合! '^。{,12} $'當然會起作用。 – 2010-10-17 22:44:24
和正則表達式的第二部分是無效的。 '{,12}'不可用。 – 2010-10-17 22:47:48
如果你想在一個字符串檢查多個模式,您可以使用look-around:
/^(?=.{5}).{0,12}$/
這樣你檢查你的字符串是至少5個字符,也是最多12個字符。
但正如你所說,在這種情況下,最好將它們中的兩個組合在.{5,12}
中。
起初我以爲你應該爲第二部分做{0,7},但你的回答是正確的。+1 – Max 2010-10-17 23:00:30
在正則表達式本身中沒有簡單的方法來做到這一點。我知道的正則表達式交集算法要求您先將正則表達式轉換爲自動機。
就你而言,最好的解決方案可能是創建一個結合了兩個正則表達式的AndRegex類。
如果你只是想匹配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
據我所知,在(大多數/所有?)應用,這無法做到的(對容易組合的要求保存在你的例子),你會只必須遍歷所有必需的正則表達式來檢查它們是否全部匹配。 – Wrikken 2010-10-17 22:31:35
你的意思是你不想選擇,但5或12,沒有什麼在兩者之間? AFAIK - {5,12}應該滿足您的需求,如果它介於兩者之間的話。 – Duniyadnd 2010-10-17 22:34:27
你確定你可以做{,12}嗎? – Max 2010-10-17 22:48:43