Как я могу напечатать только слово шаблона соответствия в Terraform - PullRequest
1 голос
/ 26 мая 2020

Если я получил значение вроде

email = "Mark Johnson (mark@johnson.com)"

Как я могу напечатать только слово в (), а вывод станет

mark@johnson.com

В настоящее время я использую регулярное выражение, но, похоже, не работает с моим выкройкой

email = regex("x{(,)}", "var.email")

Как я могу решить эту проблему, спасибо за вашу помощь.

1 Ответ

2 голосов
/ 26 мая 2020

Terrafrom использовал механизм регулярных выражений RE2, а функция regex возвращает только захваченное значение, если вы определяете группу захвата в шаблоне регулярного выражения. Он вернет список захвата, если в вашем шаблоне более одной группы захвата, но здесь вам нужна только одна.

Чтобы извлечь весь текст в круглых скобках:

> regex("[(]([^()]+)[)]", "Mark Johnson (mark@johnson.com)")

[(] соответствует ( char, ([^()]+) захватывает в Группу 1 любой один или несколько символов в Группу 1, а [)] соответствует ) char.

Чтобы извлечь строку, похожую на электронную почту из круглых скобок:

> regex("[(]([^()@[:space:]]+@[^()[:space:]]+[.][^()[:space:]]+)[)]", "Mark Johnson (mark@johnson.com)")

Здесь [^()@[:space:]]+ соответствует 1 или более символам, кроме (, ), @ и пробелов.

См. регулярное выражение демо

...