正则表达式与捕获组匹配

时间:2019-07-08 16:57:21

标签: regex

我需要有关正则表达式捕获组的帮助。

在下面的字符串中,仅当字符串中有“ skynet”并且需要两个捕获组时才需要与之匹配,accountid捕获12位数字,#角色则捕获“ skynet”前破折号后的所有内容:< / p>

  

aws-123456789012-skynet-tenant-134-admin

我在下面有正则表达式,几乎是我所需要的,除了我需要充当“ skynet-tenant-134-admin”而不是“ -tenant-134-admin”的角色:

^(?:[^-]*-)(?<accountid>\d{12})(?:[^-]*-)(?<target>skynet)(?<role>.*)

目标是仅在第二个破折号和两个捕获组包含帐户ID(123456789012)和角色(skynet-tenant-134-admin)之后出现“ skynet”时进行匹配

1 个答案:

答案 0 :(得分:2)

您可以嵌套捕获组并将target放入role

^(?:[^-]*-)(?<accountid>\d{12})(?:[^-]*-)(?<role>(?<target>skynet).*)

查看regex demo

您可能会缩短为不使用非捕获组(?:

^[^-]*-(?<accountid>\d{12})[^-]*-(?<role>(?<target>skynet).*)