Как сопоставить две группы, где группа 2 обязательна, а группа 1 необязательна - PullRequest
0 голосов
/ 19 февраля 2019

Мой ввод имеет вид: tag.service

Где tag. является необязательным, но service является обязательным (хотя может быть любой длины или значения, включая слово, цифру или -).Если тег присутствует, он всегда будет отключен от службы через .

Еще несколько примеров ввода:

abc.def a12.34b 1-2.3-4 123 abc 1-2

Я пытаюсь извлечь тег и службу из двух отдельных групп, где тег должен быть группой 1, а служба должна быть группой 2 (даже если тег отсутствует).

Мне удалось продвинуться так далеко:

^([\d\w]*)\.([\d\w]*)$

Однако вышеприведенное не позволяет группе 1 быть необязательной и не гарантирует, что группа 2 являетсявсегда сервис.

Я думаю, что нижеприведенное может немного приблизить меня, но все еще довольно далеко:

^(?:([\d\w]*)\.)?([\d\w]*)$

Используемый двигатель основан на RE2, и, к сожалению, его нет.вариант, отличный от REGEX для этого, т.е. я не могу проверить группы после REGEX, чтобы определить, какая группа имеет какое значение.

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 19 февраля 2019

Я не знаком с re2, но следующая опция использует только те возможности регулярных выражений, которые вы используете в своем вопросе, соответствует всем примерам и всегда помещает тег (если присутствует) в первую группу, а службу во вторую:

/^(?:([a-z0-9-]+)\.)?([a-z0-9-]+)$/

Демо здесь: https://regexr.com/48lnl

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...