首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何定义这个带交替的正则表达式,以便在匹配中拥有相同数量的组?

如何定义这个带交替的正则表达式,以便在匹配中拥有相同数量的组?
EN

Stack Overflow用户
提问于 2014-08-19 21:15:13
回答 1查看 56关注 0票数 0

我正在尝试解析这样的字符串。

代码语言:javascript
运行
复制
99_GOG_A_X1_FOO X-2014-09
99_YAK_A_YZ1_BAR YZY-2014-10

使用这个正则表达式

代码语言:javascript
运行
复制
99_\w{3}_(A|B)_((X)(0*[1-9][0-9]?)_(FOO|BAR) X-(\b0*20(1[4-9]|[2-9][0-9])\b)-\b0*([1-9]|1[0-2])\b|(YZ)(0*[1-9][0-9]?)_(FOO|BAR) YZY-(\b0*20(1[4-9]|[2-9][0-9])\b)-\b0*([4]|1[0])\b)

第一个输入的末尾只能有1到12,而第二个输入只能有04或10。这是可行的。但我希望有一个解决方案,只返回匹配的组。

有了这个解决方案,我有了这些组http://www.regexplanet.com/cookbook/ahJzfnJlZ2V4cGxhbmV0LWhyZHNyDwsSBlJlY2lwZRiwuuALDA/index.html

我有多余的组,并且两个输入的匹配组不在相同的索引上。

有没有一种方法可以消除空组并对齐索引?

更新:我必须遵守以下规则。如果输入与此_((X)(0*[1-9][0-9]?)匹配,则还必须包含X-,并允许在\b0*([4]|1[0])\b末尾使用此范围

如果输入与此_(YZ)(0*[1-9][0-9]?)匹配,则它还必须包含YZY-,并且只允许在\b0*([4]|1[0])\b末尾使用此输入

所以我想组合这些正则表达式:

代码语言:javascript
运行
复制
^99_\w{3}_(A|B)_(X)(0*[1-9][0-9]?)_(FOO|BAR) X-(\b0*20(1[4-9]|[2-9][0-9])\b)-\b0*([1-9]|1[0-2])\b$
^99_\w{3}_(A|B)_(YZ)(0*[1-9][0-9]?)_(FOO|BAR) YZY-(\b0*20(1[4-9]|[2-9][0-9])\b)-\b0*([4]|1[0])\b$
EN

回答 1

Stack Overflow用户

发布于 2014-08-19 23:07:33

据我所知,这可能对你有用:

代码语言:javascript
运行
复制
99_\w{3}_(A|B)_((X|(?>YZ))(0*[1-9][0-9]?)_(FOO|BAR) \3Y?-(\b0?20(1[4-9]|[2-9][0-9])\b)-\b0?((?:[1-9]|1[0-2])|(?:[4]|1[0]))\b$)

如果这失败了(它可能会失败),你应该考虑使用实际的代码来确保它通过了“allow this X- ((X)(0*[1-9][0-9]?)X- at the end \b0*([4]|1[0])\b

使用捕获组检查\3 == 'X'\3 == 'YZ',然后根据需要应用正则表达式的其余部分

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25384391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档