我得到这个变量:
variable "ip" {
default = "1.1.1.1/32"
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,我需要完整的前缀:"1.1.1.1/32"但有时我只需要不带前缀的 IP:"1.1.1.1"
现在 0.12 有这个新函数,我可以这样使用:
trimsuffix(var.ip, "/32")
Run Code Online (Sandbox Code Playgroud)
但我不想像那样对前缀进行硬编码。有没有办法删除正则表达式匹配的子字符串基数,甚至只是截断字符串的最后 3 个字符?我不能使用 substr() 因为它希望我知道完整的字符串长度。
我正在尝试使用 regex() 来执行此操作,但我不确定 Terraform 是否支持完整的正则表达式。
https://regex101.com/r/EGzxAq/1
我收到错误:
> regex("^.+(?=\/)","11.1.1.1/32")
>
Error: Invalid escape sequence
on <console-input> line 1:
(source code not available)
The symbol "/" is not a valid escape sequence selector.
Run Code Online (Sandbox Code Playgroud)
然后当我尝试转义反斜杠时:
> regex("^.+(?=\\/)","11.1.1.1/32")
>
Error: Invalid function argument
on <console-input> line 1:
(source code not available)
Invalid value for "pattern" parameter: invalid regexp pattern: invalid or
unsupported Perl syntax in (?=.
Run Code Online (Sandbox Code Playgroud)
如果您只想截断前缀以删除/32或任何其他任意前缀,那么/16您可以使用该cidrhost函数,只需将主机号指定为 0 即可获取网络地址:
$ terraform console
> cidrhost("192.168.0.0/16", 0)
192.168.0.0
> cidrhost("1.1.1.1/32", 0)
1.1.1.1
Run Code Online (Sandbox Code Playgroud)
如果您出于某种原因想为此使用正则表达式,那么您只想捕获 so 之前的部分,/因此(.*)/.*应该可以用作搜索模式。该regex函数返回捕获组列表,因此您只需要第一个:
> regex("(.*)/.*", "192.168.0.0/16")[0]
192.168.0.0
> regex("(.*)/.*", "1.1.1.1/32")[0]
1.1.1.1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1589 次 |
| 最近记录: |