我希望将正则表达式与 2 [0-9]重复(然后是其他一些模式)进行匹配
[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 :(得分:5)
您可以在非捕获组中使用或|
这样:
(?:[0-9]{2}|[0-9]{6})[A-z]{4}
请注意,使用[A-z]
不仅包括大写和小写字母,还包括[
,\
,]
,^
,{ {1}}和_
位于ASCII代码点中的'
和Z
之间。正如@AlanMoore在评论中指出的那样,使用a
作为信件。
答案 1 :(得分:3)
这应该有效
(?:[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]
因为它可能是预期的(所有字母字符,无论情况如何)您还可以将[0-9]
替换为\d
,这是任何数字的简写。我能想到的最好的方法,而不是部分匹配如下
(?:\b|^)(?:\d{2}|\d{6})[a-zA-Z]{4}(?:\b|$)
答案 2 :(得分:3)
经典的方式是:
(?:[0-9]{2}|[0-9]{6})[A-z]{4}
[字面意思为[0-9]{2}
或[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表中的块字母和小写字母之间。
答案 3 :(得分:2)
不明显,但是是的:
(?:\d{2}|\d{6})