J'ai besoin d'utiliser des expressions régulières dans mon code Terraform. La documentation de la fonction replace indique que la chaîne si elle est enveloppée dans une barre oblique peut être traitée comme une expression régulière.
J'ai essayé ce qui suit:
Name = "${replace(var.string, var.search | lower(var.search), replace)}"
J'ai besoin d'utiliser l'expression régulière pour remplacer la chaîne ou la minuscule de la chaîne par la chaîne de remplacement.
Les documents Terraform pour la fonction de remplacement indiquent que vous devez encapsuler votre chaîne de recherche dans des barres obliques pour qu'elle recherche une expression régulière et cela est également visible dans le code .
Terraform utilise la bibliothèque re2 pour gérer les expressions régulières qui prennent soi-disant un /i
flag pour le rendre insensible à la casse. Cependant, je n'arrivais pas du tout à faire fonctionner ça (même en essayant /search/i/
) mais il prend en charge expressions régulières de style Perl sauf en mode POSIX, il suffit donc de préfixer votre variable de recherche avec (?i)
devrait fonctionner correctement.
Un exemple de base travaillé ressemble à ceci:
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)}"
}
}
Un autre exemple - en supprimant le point de la fin de la variable "chaîne":
variable "string" { default = "Foo." }
"${replace("var.string", "\\.$", "")}"
Je pense que c'est: "${replace(var.string, "/\\.$/", "")}"