我正在尝试解析这样的字符串
99_GOG_A_X1_FOO X-2014-09
99_YAK_A_YZ1_BAR YZY-2014-10
用这个正则表达式
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
所以我想结合这些正则表达式:
^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$