我期待一个正则表达式与匹配任一 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]'不是我正在使用的正则表达式的一部分,我只是用它作为我冗长的正则表达式的其他部分的表达,以便不会减损我的问题。 (谢谢你的教学时间,但是(没有讽刺,我实际上是新的正则表达式,并没有意识到这一点)。 –