我仍然试图去掌握正则表达式模式,并在稍后再仔细检查一下,如果有人不介意妥协!许可证密钥的正则表达式匹配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次。请注意,'$'匹配字符串的末尾。 –