我需要在Terraform代码中使用正则表达式。replace函数的文档中说,如果字符串被 Package 在正斜杠中,则可以将其视为正则表达式。我尝试了以下方法:
Name = "${replace(var.string, var.search | lower(var.search), replace)}"
我需要使用正则表达式来替换字符串或字符串的小写字母。
xxls0lw81#
替换函数的Terraform文档指出,您需要将搜索字符串 Package 在正斜杠中,以便搜索正则表达式,这也可以在代码中看到。Terraform使用re2 library来处理正则表达式,该正则表达式需要一个/i标志来使其不区分大小写。然而,我似乎无法让它工作(甚至尝试/search/i/),但它确实支持Perl风格的正则表达式,除非在POSIX模式下,所以简单地用(?i)作为搜索变量的前缀应该可以正常工作。一个基本的工作示例如下所示:
/i
/search/i/
(?i)
variable "string" { default = "Foo" } variable "search" { default = "/(?i)foo/" } variable "replace" { default = "bar" } resource "aws_instance" "example" { ami = "ami-123456" instance_type = "t2.micro" tags { Name = "${replace(var.string, var.search, var.replace)}" } }
h22fl7wq2#
再举一个例子-从“string”变量的末尾删除句点:
variable "string" { default = "Foo." } "${replace("var.string", "\\.$", "")}"
nhaq1z213#
只是为了帮助别人看这里。。根据Terraform文档:https://www.terraform.io/docs/language/functions/replace.html要被识别为Regex,您需要将模式放在/(斜杠)之间,如下所示:
> replace("hello world", "/w.*d/", "everybody") > hello everybody
e7arh2l64#
我认为是:"${replace(var.string, "/\\.$/", "")}"
"${replace(var.string, "/\\.$/", "")}"
wgeznvg75#
我创建了一个Go Playground链接:模拟replace函数的https://go.dev/play/p/T3KGburfZcw。我正在使用旧版本的Terraform,但它应该仍然适用于较新的版本。希望这对那些努力调试正则表达式的人有帮助。
replace
5条答案
按热度按时间xxls0lw81#
替换函数的Terraform文档指出,您需要将搜索字符串 Package 在正斜杠中,以便搜索正则表达式,这也可以在代码中看到。
Terraform使用re2 library来处理正则表达式,该正则表达式需要一个
/i
标志来使其不区分大小写。然而,我似乎无法让它工作(甚至尝试/search/i/
),但它确实支持Perl风格的正则表达式,除非在POSIX模式下,所以简单地用(?i)
作为搜索变量的前缀应该可以正常工作。一个基本的工作示例如下所示:
h22fl7wq2#
再举一个例子-从“string”变量的末尾删除句点:
nhaq1z213#
只是为了帮助别人看这里。。根据Terraform文档:https://www.terraform.io/docs/language/functions/replace.html
要被识别为Regex,您需要将模式放在/(斜杠)之间,如下所示:
e7arh2l64#
我认为是:
"${replace(var.string, "/\\.$/", "")}"
wgeznvg75#
我创建了一个Go Playground链接:模拟
replace
函数的https://go.dev/play/p/T3KGburfZcw。我正在使用旧版本的Terraform,但它应该仍然适用于较新的版本。希望这对那些努力调试正则表达式的人有帮助。