在Ansible的regex_replace过滤器中,我无法找到更多文字(点)的方法.这是任务:
- name: Display database name
debug:
msg: "{{ vhost | regex_replace('(.+\.)(.+)$', \\1) }}"
tags: [debug]
Run Code Online (Sandbox Code Playgroud)
我的目的是匹配并替换整个URL,如test.staging.domain.com及其第一部分(示例中的测试).
Ansible会报告以下错误:
debug:
msg: "{{ vhost | regex_replace('(.+\.)(.+)$', \\1) }}"
^ here
Run Code Online (Sandbox Code Playgroud)
我们可能是错的,但这个看起来可能是缺少引号的问题.在启动值时始终引用模板表达式括号.
如何匹配Ansible regexp_replace过滤器中的文字?
它实际上可以通过双反斜杠来逃避文字:
- name: Create database name and username
set_fact:
db_name: "{{ vhost | regex_replace('([^\\.]*)\\.(.+)$', '\\1') }}_stg"
Run Code Online (Sandbox Code Playgroud)
上面的正则表达式正常工作.第一个捕获组提取URL的第一部分直到第一个点,整个正则表达式捕获整个URL.通过test.staging.domain.co m 传递它只会产生测试.
转义字符可能会有些奇怪,但是有一种无需转义的方法来编码文字点:
[.]
Run Code Online (Sandbox Code Playgroud)
所以你的正则表达式可以写成
(.+[.])(.+)$
Run Code Online (Sandbox Code Playgroud)
大多数字符在字符类中都会失去其特殊含义,点就是其中之一。
| 归档时间: |
|
| 查看次数: |
15483 次 |
| 最近记录: |