微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby – 有没有办法缩短这个正则表达式?

我希望匹配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 :),这可以达到你想要的效果.

原文地址:https://www.jb51.cc/ruby/264607.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐