【问题标题】:How can I print only match pattern word in Terraform如何在 Terraform 中仅打印匹配模式字
【发布时间】:2020-09-12 20:41:45
【问题描述】:

如果我有这样的价值

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

如何只打印 () 中的单词并输出变为

mark@johnson.com

目前我正在使用正则表达式,但它似乎不适用于我的模式

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

我该如何解决这个问题,谢谢您的帮助。

【问题讨论】:

  • 这是一种看起来很奇怪的模式,甚至与您所追求的不符。如果我可以提出一些建议,可能像(?<=\()[^)]+ 这样的模式或者通过前瞻扩展一点也可以完成这项工作。

标签: regex terraform word terragrunt


【解决方案1】:

Terrafrom 使用 RE2 正则表达式引擎,如果您在正则表达式模式中定义捕获组,regex 函数仅返回捕获的值。如果您的模式中有多个捕获组,它将返回一个捕获列表,但在这里,您只需要一个。

提取括号内的所有文本:

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

[(] 匹配 ( 字符,([^()]+) 将任何一个或多个字符捕获到组 1 中,[)] 匹配 ) 字符。

从括号中提取类似电子邮件的字符串:

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

在这里,[^()@[:space:]]+ 匹配除 ()@ 和空格之外的 1 个或多个字符。

regex demo

【讨论】:

    最近更新 更多