在Terraform中如何结合正则表达式与条件表达式实现判断?
Terraform 条件匹配正则的正确实现方式
要实现你想要的逻辑,有两种常用且可靠的方式:
方式一:使用 can() 函数判断正则是否匹配
can() 函数的作用是检测传入的表达式是否能成功执行而不抛出错误,正好解决 regex() 不匹配就报错的问题。修改后的表达式如下:
name = can(regex("p[1-9]+", my_input)) ? "production" : "testing"
当 my_input 匹配正则模式时,regex() 执行成功,can() 返回 true,结果为 "production";不匹配时 regex() 会触发错误,但 can() 会捕获这个错误并返回 false,结果为 "testing"。
方式二:使用 regexall() 配合 length() 判断匹配结果数量
regexall() 函数会返回所有匹配正则的字符串组成的列表,不会因为无匹配而报错。通过检查列表长度是否大于0,就能判断是否存在匹配:
name = length(regexall("p[1-9]+", my_input)) > 0 ? "production" : "testing"
如果 my_input 匹配正则,regexall() 返回非空列表,length() 结果大于0,条件为真;无匹配时返回空列表,长度为0,条件为假。
两种方式都能实现你的需求,可根据个人习惯选择。如果后续需要用到匹配到的字符串内容,regexall() 的方式能直接获取结果;如果只需要判断匹配状态,can() 的写法更简洁直观。
内容的提问来源于stack exchange,提问作者user8473984
相关产品推荐
相关产品推荐

