我需要有关正则表达式捕获组的帮助。
在下面的字符串中,仅当字符串中有“ 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”时进行匹配
答案 0 :(得分:2)
您可以嵌套捕获组并将target
放入role
^(?:[^-]*-)(?<accountid>\d{12})(?:[^-]*-)(?<role>(?<target>skynet).*)
您可能会缩短为不使用非捕获组(?:
^[^-]*-(?<accountid>\d{12})[^-]*-(?<role>(?<target>skynet).*)