我在寫一個正則表達式,其中的字符串可以是2-3個字符。 第一個字符必須是A和H(首都)之間的字母。這和性格所應遵循一個數字1和12 之間我寫匹配字母后跟特定數字範圍
[A-H]{1}[1-12]{1,2}
這是很好,當我科印A12
而不是當我科印A6
請建議。
我在寫一個正則表達式,其中的字符串可以是2-3個字符。 第一個字符必須是A和H(首都)之間的字母。這和性格所應遵循一個數字1和12 之間我寫匹配字母后跟特定數字範圍
[A-H]{1}[1-12]{1,2}
這是很好,當我科印A12
而不是當我科印A6
請建議。
,因爲它是以字符之間的範圍內實現的,您可以不指定範圍的這樣的數字,所以[1-12]
相當於[12]
,這將只匹配無論是1
或2
。相反,嘗試以下操作:
[A-H](?:1[012]|[1-9])
這裏有一個解釋:
[A-H] # one letter from A to H
(?: # start non-capturing group
1[012] # 1 followed by 0, 1, or 2 (10, 11, 12)
| # OR
[1-9] # one digit from 1 to 9
) # end non-capturing group
注意,{1}
[A-H]
後,原來的正則表達式是不必要的,[A-H]{1}
和[A-H]
是等價的。
你可能要考慮在正則表達式中添加錨,否則你也會得到一個像A20
這樣的字符串的部分匹配。如果你試圖匹配整個字符串,那麼你應該使用下列內容:
如果它是一個較大的文本中,你可以使用單詞邊界,而不是:
\b[A-H](?:1[012]|[1-9])\b
謝謝。在這種情況下,A12只是部分匹配。只有A1匹配。 http://rubular.com/r/EQmL27ZTAH – Ank
@Ankur - 我只是改變了交替的順序,所以它現在應該可以正常工作。你可能要考慮在正則表達式中添加錨點,否則你會得到像A20這樣的字符串的部分匹配。如果你想匹配整個字符串,那麼你應該使用'\ A [AH](?: 1 [012] | [1-9])\ z',或者如果它在更大的文本字內, '\ b [AH](?: 1 [012] | [1-9])\ b' –
謝謝..有道理..現在可以工作。 – Ank