首页 > 解决方案 > Terraform 替换正则表达式无法正常工作

问题描述

我有一个正则表达式来替换我的一个变量中的任何非单词字符、下划线或空格,以清理名称以将其传递给 Route53。

它正在替换非字母数字和下划线,但它卡在空格上。

我知道正则表达式\s用于空格,但是当 Terraform 计划运行时它似乎忽略了它,但是如果我通过正则表达式检查器运行它,它工作正常。

identifier        = "qa-${lower(replace(var.dns_name,"/\\W|_|\\s/","-"))}"

标签: regexterraform

解决方案


我在 Terraform v0.12.21 中使用了您的正则表达式,并使用空格和各种特殊字符对其进行了测试:

dns_name = "abc DEF 123 ~'`!@#$%^&*()_+-=[]\\{}|;':\\./<>?\"\\'.com" 
identifier = "${lower(replace(var.dns_name,"/\\W|_|\\s/","-"))}"

terraform plan表明正则表达式正确地将字母、数字或连字符以外的任何内容替换为连字符,这似乎是 Route 53 所需的:

"abc-def-123-------------------------------------com"

但也请注意,域名可能无法包含两个连续的连字符(请参阅此处)。


推荐阅读