我期待一個正則表達式與匹配任一 2 [0-9]重複(再一些其它圖案)REGEX中繼器 「或者」 操作員
[0-9]{2}[A-z]{4}
OR 6 [0-9]重複(再一些其它圖案)
[0-9]{6}[A-z]{4}
以下是太包容:
[0-9]{2,6}[A-z]{4}
問題
有沒有一種方法可以指定2個或6個重複?
我期待一個正則表達式與匹配任一 2 [0-9]重複(再一些其它圖案)REGEX中繼器 「或者」 操作員
[0-9]{2}[A-z]{4}
OR 6 [0-9]重複(再一些其它圖案)
[0-9]{6}[A-z]{4}
以下是太包容:
[0-9]{2,6}[A-z]{4}
問題
有沒有一種方法可以指定2個或6個重複?
這應該工作
(?:[0-9]{2}|[0-9]{6})[a-zA-Z]{4}
你有一些測試情況下,我可以驗證它。
但是,如果你沒有正則表達式的開始錨定到一個字(\ b)或邊界線(^),1234asdf
將具有34asdf
作爲部分匹配。
因此,要麼
\b(?:[0-9]{2}|[0-9]{6})[a-zA-Z]{4}
或
^(?:[0-9]{2}|[0-9]{6})[a-zA-Z]{4}
作爲正則表達式的快速綱要改變
(?:)
創建一個非捕獲組|
選擇變質劑之間[0-9] {2}和[0-9] {6}^
相匹配的線$
的開始的線\b
的端部相匹配的字邊界[a-zA-Z]
是匹配用於代替[A-z]
,因爲它很可能意圖是什麼(所有字母字符,不區分大小寫)你也可以用\d
這是任何數字速記取代你[0-9]
秒。我能想到的最好的方式來糾正這一點,不明白的是部分匹配如下
(?:\b|^)(?:\d{2}|\d{6})[a-zA-Z]{4}(?:\b|$)
-1代表'[A-z]'。 (請參閱我的問題。) –
@AlanMoore,我從用戶問題中複製了「其他模式」。你是誰來判斷他那部分正則表達式的有效性?給OP和我們留下評論,指出潛在的錯誤,但對它的低估僅僅是粗魯。 – CaffGeek
我是誰?我是那個知道'[A-Z]'總是*錯誤的人(顯然是唯一一個)。也許我反應過度了,但是我有些震驚地看到有三個人似乎對盲目重複這樣一個公然的,初學者的錯誤的正則表達式有所瞭解。 –
並不明顯,但肯定的:
(?:\d{2}|\d{6})
'\ d'不保證與[0-9]'相同。 Unicode是狂野而毛茸茸的! –
經典的方法是:
(?:[0-9]{2}|[0-9]{6})[A-z]{4}
[字面上[0-9]{2}
OR [0-9]{6}
]
但是你也可以使用這一個,這應該是比上面一個小更高效的用更少的潛在回溯:
[0-9]{2}(?:[0-9]{4})?[A-z]{4}
[這裏,[0-9]{2}
然後潛在其他4 [0-9]
這使得總在所要求的條件6 [0-9]
]
你可能不知道,[A-z]
匹配的字母和一些其他字符,但它實際上做。
範圍[A-z]
有效等價於:
[A-Z\[\\\]^_`a-z]
注意,相匹配的附加的字符是:
[ \ ]^_ `
[含自願分離空間,但不是字符的一部分]
這是因爲這些字符位於unicode表中的塊字母和小寫字母之間。
**請勿在REGEX中使用[A-Z] **要匹配任何ASCII字母,大寫或小寫,請使用[[A-Za-z]]。 '[A-Z]'匹配所有那些,*加上*代碼點恰好位於'Z'和'a'之間的幾個標點符號。 –
@AlanMoore謝謝你。正如我在下面的評論中提到的那樣,'[A-z]'不是我正在使用的正則表達式的一部分,我只是用它作爲我冗長的正則表達式的其他部分的表達,以便不會減損我的問題。 (謝謝你的教學時間,但是(沒有諷刺,我實際上是新的正則表達式,並沒有意識到這一點)。 –