我希望匹配A0123456,E0123456或IN:A0123456Q等格式的字符串.我最初制作了这个正则表达式
^(IN:)?[AE] [0-9] {7} Q $?
但它匹配IN:E012346,最后没有Q.所以我创建了这个正则表达式
(^ IN:[AE] [0-9] {7} Q $)|(^ [AE] [0-9] {7} $)
是否有任何方法可以缩短此正则表达式,以便它既需要IN:又需要Q(如果它们存在),但如果两者都不存在则不需要?
编辑:正则表达式将在Ruby中使用.
编辑2:我更改了正则表达式以反映我匹配错误的字符串,因为它仍然匹配IN:A0123456.
编辑3:下面的两个答案都是有效的,但由于我使用的是Ruby 2.0并且更喜欢正则表达式,我可以使用以防万一我改变我的应用程序并且不想使用子表达式调用的Ruby风格,我选择接受matt的答案.
解决方法
如果您使用的是Ruby 2.0,则可以使用
if-then-else conditional match(在Ruby文档中未记录,但确实存在):
/^(IN:)?[AE][0-9]{7}(?(1)Q|)$/
条件部分是(?(1)Q |),表示如果组号1匹配,则匹配Q,否则不匹配.由于组号1是(IN :),这可以达到你想要的效果.