我希望将正则表达式与匹配,2 0-9重复(然后是其他模式)。
[0-9]{2}[A-z]{4}
或6 0-9重复(然后是其他模式)
[0-9]{6}[A-z]{4}
以下内容过于包容:
[0-9]{2,6}[A-z]{4}
问题
是否有一种方法可以指定2或6重复?
发布于 2014-01-28 19:28:48
您可以在非捕获组中这样使用或|
:
(?:[0-9]{2}|[0-9]{6})[A-z]{4}
请注意,使用[A-z]
不仅包括小写字母和大写字母,还包括[
、\
、]
、^
、_
和'
,它们位于ASCII代码点中的Z
和a
之间。如@AlanMoore在其评论中指出的那样,字母使用[A-Za-z]
。
发布于 2014-01-28 19:28:25
这应该能行
(?:[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}
作为regex更改的快速运行。
(?: )
创建一个非捕获组|
在0-9{2}和0-9{6}之间进行选择。^
与行的开头匹配$
与行尾匹配\b
匹配单词边界[a-zA-Z]
正在被使用,而不是[A-z]
,因为它很可能是打算使用的(不管情况如何,都是alpha字符)。您还可以将[0-9]
替换为\d
,它是任何数字的缩写。我认为最好的方法是纠正这个问题,而不是得到部分匹配:
(?:\b|^)(?:\d{2}|\d{6})[a-zA-Z]{4}(?:\b|$)
发布于 2014-01-28 19:28:34
不明显,但是的:
(?:\d{2}|\d{6})
https://stackoverflow.com/questions/21414915
复制相似问题