我需要在我的Terraform代码中使用正则表达式。 documentation for the replace function表示如果用正斜杠包裹的字符串可以被视为正则表达式。
我尝试了以下内容:
Name = "${replace(var.string, var.search | lower(var.search), replace)}"
我需要使用正则表达式来替换字符串的字符串或小写字母和替换字符串。
答案 0 :(得分:11)
replace function状态的Terraform文档,您需要将搜索字符串换成正斜杠,以便搜索正则表达式,这也可以在code中看到。
Terraform使用re2 library来处理正则表达式,它应该使用/i
标志使其不区分大小写。但是我似乎无法让它工作(甚至尝试/search/i/
),但它确实支持Perl style regular expressions,除非在POSIX模式下,因此只需在(?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)}"
}
}
答案 1 :(得分:1)
另一个示例-从“字符串”变量的末尾删除句点:
variable "string" { default = "Foo." }
"${replace("var.string", "\\.$", "")}"
答案 2 :(得分:0)
我认为是:"${replace(var.string, "/\\.$/", "")}"
答案 3 :(得分:0)
只是为了帮助其他人看这里...遵循 Terraform 文档: https://www.terraform.io/docs/language/functions/replace.html
要被识别为正则表达式,您需要将模式放在 /(斜线)之间,如下所示:
> replace("hello world", "/w.*d/", "everybody")
> hello everybody