如果匹配某些条件,则正则表达式从第二个捕获组中排除

时间:2016-10-09 12:10:03

标签: regex regex-lookarounds regex-greedy

到目前为止我的正则表达式是:

^(UCX_|UBX_|USP_)([A-Za-z0-9]\w+)(_\d+)?$

当我测试字符串时:

UCX_1maxi_holiday2_blah_343

它正确地测试了,但是我的上一个捕获组永远不会到达,因为它也匹配第二组。 即如果最后一个下划线划分的部分是所有数字,我希望第三个捕获组中的那个部分不是第二个。另外我想在第二组中使用它。

我已经想到了前瞻和后悔,我不认为他们会为此工作,但我可能会感到惊讶。

我可以单独进行测试,单独检查字符串的结尾,然后根据需要拆分字符串,但需要知识分子的好奇心。

我想知道是否有办法修改第二个捕获组,以阻止它破坏结束,如果它是所有数字

任何人都有一些Regex JiuJitsu吗?

2 个答案:

答案 0 :(得分:1)

如果您将第二次捕捉更改为非贪婪,您将得到您想要的。 使用:

^(UCX_|UBX_|USP_)([A-Za-z0-9]\w+?)(_\d+)?$

答案 1 :(得分:0)

您可以简化这样做:

^(UCX_|UBX_|USP_)(\w+?)(_\d+)?$
  

\w字符是来自a-z,A-Z,0-9的字符,包括_   (下划线)角色。

相关问题