Регулярное совпадение с группами захвата - PullRequest
2 голосов
/ 08 июля 2019

Мне нужна помощь с группами захвата регулярных выражений.

В приведенной ниже строке мне нужно, чтобы оно совпадало только в том случае, если в строке есть «skynet» и нужны две группы захвата, которые должны захватить учетную запись из 12 цифр # и роль для захвата всего после тире до «skynet»:

AWS-123456789012-SkyNet-арендатор-134-админ

Ниже приведено регулярное выражение, и это почти то, что мне нужно, за исключением того, что мне нужна роль «skynet-tenant-134-admin», а не «-tenant-134-admin»:

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

Цель состоит в том, чтобы совпадать только в том случае, если после второй черты появляется «skynet» и две группы захвата, содержащие accountid (123456789012) и роль (skynet-tenant-134-admin)

1 Ответ

2 голосов
/ 08 июля 2019

Вы можете вложить группы захвата и поместить target внутрь role

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

См. Демоверсию regex

Который вы можете сократить без использования групп без захвата (?:

^[^-]*-(?<accountid>\d{12})[^-]*-(?<role>(?<target>skynet).*)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...