01 = match
10 = match
99 = match
00 = no match
到目前爲止,我有這樣的:/^ [1-9][0-9] | [0-9][1-9] $/
但它可以優化我有感覺。
01 = match
10 = match
99 = match
00 = no match
到目前爲止,我有這樣的:/^ [1-9][0-9] | [0-9][1-9] $/
但它可以優化我有感覺。
您可以使用負前瞻限制通用[0-9]{2}
模式:
^(?!00)[0-9]{2}$
的[0-9]{2}
將完全匹配2位數。 (?!00)
negative lookahead將在字符串的開頭執行一次,並確保沒有00
直到字符串結束。如果字符串等於00
,則不會找到匹配。
查看更多關於How Negative Lookahead Works。
詳細模式闡釋:
^
- 字符串的開始(?!00)
- 如果有兩個0
S中的當前位置之後(在字符串的開頭失敗的比賽負前瞻)。由於下一個子模式 - [0-9]{2}$
- 只允許在字符串中使用2個符號,所以我們不必在預見中添加任何錨點,在其他情況下,必須添加$
以排除00
匹配。[0-9]{2}
- 整整兩個(感謝限制量詞{min(,max)?}
)數字(在大多數的口味,[0-9]
可以用\d
取代,但\d
也可以搭配比普通[]
更多一些口味)$
- 結束的字符串(取決於正則表達式的風格,\z
可能更好,因爲它匹配字符串的非常結尾)。試試這個正則表達式:
(?!00)\d\d
這將使用Negative Lookahead(這裏是一個nice answer解釋它),(?!)
。這意味着無論內部存在什麼,都不匹配。在這種情況下,它將檢測是否存在00
,如果存在則失敗。如果沒有,選擇了2位(\d
是[0-9]
簡寫)
一個更安全的版本:
^(?!00)\d\d$
這也採用^
,其中指出,數據必須是在字符串的開頭(或帶有m
標誌的行)和$
數據必須在最後。因此,當您使用^ $
,裏面的數據必須在全行/串
以下匹配是負先行的一些例子:(?!00)
# Using the RegEx (?!9)\d
1 # Match
2 # Match
5 # Match
9 # NO MATCH
# Using the RegEx (?!Tom)\w+
Tim # Match
Joe # Match
Bob # Match
Tom # NO MATCH
# Using the RegEx (?!Foo)\w+(?!Bar)
BarBazFoo # Match
BazBarFoo # Mtach
FooBarBaz # NO MATCH
BazFooBar # NO MATCH
'\ d \ D'也將匹配'9900'中的'99'。 –
@WiktorStribiżew我認爲只有2位數字,特別是因爲您在答案中使用了「{2}」。如果有,那麼'9900'將不會存在。但謝謝你通知我! – Druzion
限制量詞不會指示輸入中應該有多少個字符,但前面的子模式可以匹配多少個字符。 –