Как я могу напечатать только слово шаблона соответствия в Terraform

Если бы я получил значение, как

email = "Mark Johnson ([email protected])"

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

[email protected]

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

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

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


person R.Phatter    schedule 26.05.2020    source источник
comment
stackoverflow.com/questions/42407785/   -  person Ajay Tom George    schedule 26.05.2020
comment
Это странно выглядящий шаблон, и он даже близко не подходит к тому, что вам нужно. Если я могу предложить что-то, возможно, такой шаблон, как (?<=\()[^)]+, или немного расширенный с просмотром вперед, тоже подойдет.   -  person JvdV    schedule 26.05.2020


Ответы (1)


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

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

> regex("[(]([^()]+)[)]", "Mark Johnson ([email protected])")

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

Чтобы извлечь строку, подобную электронной почте, из скобок:

> regex("[(]([^()@[:space:]]+@[^()[:space:]]+[.][^()[:space:]]+)[)]", "Mark Johnson ([email protected])")

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

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

person Wiktor Stribiżew    schedule 26.05.2020