Ansible使用regex_search报unknown escape character错误如何解决
解决方法
直接使用如下任意一种写法即可完成提取:
- 写法1(无需零宽断言,逻辑更简单不易出错)
# 单引号包裹正则时无需额外转义 {{ filename | regex_search('/(\w+)-', '\1') | first }} - 写法2(沿用你原有的零宽断言逻辑)
{{ filename | regex_search('(?<=/)\w+(?=-)') }}
如果你的Jinja2表达式外层被双引号包裹,需要把正则内的\w替换为\\w即可,示例:
server_name: "{{ filename | regex_search('(?<=/)\\w+(?=-)') }}"
报错原因说明
- 语法结构错误:你原先的写法将正则表达式拆成了三个独立的括号包裹字符串,属于Jinja2模板语法错误,
regex_search过滤器要求正则规则作为单个字符串参数传入。 - 转义规则冲突:Ansible的Jinja2模板解析和正则引擎会做两层转义处理,如果你用双引号包裹正则,
\w会先被Jinja2解析,由于不存在\w这个转义字符就会触发报错;用单引号包裹正则则不会触发该层转义,可直接使用\w。
验证效果
当filename变量值为directory/SERVER1-info.dat时,上述两种写法的返回结果均为SERVER1,符合提取要求。
内容的提问来源于stack exchange,提问作者Julia L
相关产品推荐
相关产品推荐

