加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 23:26:12 所属栏目:百科 来源:网络整理
导读:我希望匹配A0123456,E0123456或IN:A0123456Q等格式的字符串.我最初制作了这个正则表达式 ^(IN:)?[AE] [0-9] {7} Q $? 但它匹配IN:E012346,最后没有Q.所以我创建了这个正则表达式 (^ IN:[AE] [0-9] {7} Q $)|(^ [AE] [0-9] {7} $) 是否有任何方法可以缩
我希望匹配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 :),这可以达到你想要的效果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读