我仍然試圖去掌握正則表達式模式,並在稍後再仔細檢查一下,如果有人不介意妥協!許可證密鑰的正則表達式匹配25個字母數字和4個連字符
我有一個字符串,其都應包含:
- 10位(數字和字母)許可密鑰,例如:1234567890 OR
- 一個25位(數字和字母)的許可證密鑰,用於例如:
ABCD1EFGH2IJKL3MNOP4QRST5
OR - A 29位許可證號碼(25數字和字母,用連字符分離成5組),例如:
ABCD1-EFGH2-IJKL3-MNOP4-QRST51
我可以匹配前兩個罰款,使用ctype_alnum和strlen函數。然而,對於最後一個我認爲我需要使用正則表達式和preg_match
。
我在regex101.com一個走了過來,並與下面上來:
preg_match('^([A-Za-z0-9]{5})+-+([A-Za-z0-9]{5})+-+([A-Za-z0-9]{5})+-([A-Za-z0-9]{5})+-+([A-Za-z0-9]{5})', $str);
這似乎符合我要找的。 我希望字符串只包含以許可證號開頭的字符串的完全匹配,並且不包含任何順序的混合大小寫字母和數字以及每組5個字符之間的連字符(因此總共有29個字符 - 我不想進一步匹配)。在29位數字鍵之前或之後沒有空格,沒有其他字符,也沒有其他字符。
請問以上的工作,不允許任何其他組合?它會停止檢查29個字符?我不確定是否有更簡單的方法來表達這個正則表達式?
謝謝你的時間!
你忘了錨和正則表達式的分隔符。另外,我相信'+'放錯了位置,將它們刪除。使用''[A-Za-z0-9] {5} - [A-Za-z0-9] {5} - [A-Za-z0-9] {5} - [A-Za-z0 -9] {5} - [A-ZA-Z0-9] {5} $〜''。或者甚至是''^^[A-Za-z0-9] {5}(?: - [A-Za-z0-9] {5}){4} $〜''。試試[這裏](https://regex101.com/r/jC3xV2/3)。 –
@WiktorStribiżew感謝您的快速響應,非常感謝。你能解釋縮短版本的含義嗎?我試圖更好地理解正則表達式。因此,我不必在這裏困擾你們!此外,如果您將此作爲答案提交,我將能夠接受它是否有效(當我接受答案的時間限制通過時)。 – BottyZ
*如果有效*是我不發佈該信息的關鍵。它工作嗎?縮短的版本與更長的版本相同,它只是使用限制量詞'{4}',以免重複該模式4次。請注意,'$'匹配字符串的末尾。 –