如何确保具有替代模式的第二组与第一组匹配?

时间:2014-07-31 15:51:35

标签: regex

我有以下正则表达式,我希望第一组的匹配替代方案是第二组的匹配替代方案。

(?i)^([a-z]+|\d+)-([a-z]+|\d+)$

基本上我想要的是如果第一组中\[a-z\]匹配我只希望该模式与第二组匹配,并且如果\\d匹配第一组,我希望只有该模式匹配第二组。

我尝试使用包含[a-z]+)-([a-z]+)|(\d+)-(\d+)的扩展正则表达式,但这给了我4个组1,23,4,其中一组已填充,另一组为null。< / p>

我想在只有群组1,2的情况下进行调整,因此我不必测试哪些群组实际匹配。

给出以下输入:

10-15
XX-ZZ
5-A
a-1000

10-15应该匹配 XX-ZZ应该匹配 5-A匹配 a-1000应该匹配

3 个答案:

答案 0 :(得分:1)

使用条件

这是你的正则表达式:

/(?i)^([a-z]+|\d+)-([a-z]+|\d+)$/

请参阅以下内容:

/(?i)^(?:([a-z]+)|\d+)-(?(1)[a-z]+|\d+)$/

Regex Demo

答案 1 :(得分:0)

除非我遗漏了一些显而易见的东西,否则我认为以下正则表达式适合你:

(?im)^(?:([a-z]+-[a-z]+)|(\d+-\d+))$

RegEx Demo

答案 2 :(得分:0)