regex Terraform中的正则表达式

kgqe7b3p  于 2023-06-07  发布在  其他
关注(0)|答案(5)|浏览(164)

我需要在Terraform代码中使用正则表达式。replace函数的文档中说,如果字符串被 Package 在正斜杠中,则可以将其视为正则表达式。
我尝试了以下方法:

Name = "${replace(var.string, var.search | lower(var.search), replace)}"

我需要使用正则表达式来替换字符串或字符串的小写字母。

xxls0lw8

xxls0lw81#

替换函数的Terraform文档指出,您需要将搜索字符串 Package 在正斜杠中,以便搜索正则表达式,这也可以在代码中看到。
Terraform使用re2 library来处理正则表达式,该正则表达式需要一个/i标志来使其不区分大小写。然而,我似乎无法让它工作(甚至尝试/search/i/),但它确实支持Perl风格的正则表达式,除非在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)}"
  }
}
h22fl7wq

h22fl7wq2#

再举一个例子-从“string”变量的末尾删除句点:

variable "string"  { default = "Foo." }

"${replace("var.string", "\\.$", "")}"
nhaq1z21

nhaq1z213#

只是为了帮助别人看这里。。根据Terraform文档:https://www.terraform.io/docs/language/functions/replace.html
要被识别为Regex,您需要将模式放在/(斜杠)之间,如下所示:

> replace("hello world", "/w.*d/", "everybody")
 > hello everybody
e7arh2l6

e7arh2l64#

我认为是:"${replace(var.string, "/\\.$/", "")}"

wgeznvg7

wgeznvg75#

我创建了一个Go Playground链接:模拟replace函数的https://go.dev/play/p/T3KGburfZcw。我正在使用旧版本的Terraform,但它应该仍然适用于较新的版本。希望这对那些努力调试正则表达式的人有帮助。

相关问题