来自包含网址

时间:2017-11-06 01:08:02

标签: regex ansible

我正在尝试使用Ansible正则表达式从多字符串中提取子字符串,但没有成功。

我从一个被执行的命令(teleport users add)获得了这个输出:

  

“stdout”:“已创建注册令牌,有效期为3600秒。与用户共享此URL:\ n ntttt:// main-proxy:3080 / web / newuser / d32ed2bc0ebb0084a381123e3eff0bfa \ n \ n注意:确保'main-proxy'是可以访问的!“

我想提取juste令牌。这里:d32ed2bc0ebb0084a381123e3eff0bfa

我在结果变量中注册了输出,并且我试图提取令牌但没有成功:

- set_fact:
    signup_token: '{{ result.stdout | regex_replace("^(?s)^https:\/\/.*\/(.+).*?$", "\\1") }}'
- debug: msg={{ signup_token }}

正确的正则表达式和语法是什么?

2 个答案:

答案 0 :(得分:1)

为什么使用如此复杂的正则表达式?在[0-9a-f]之后获取/的32个字符。

- set_fact:
    signup_token: "{{ mystr | regex_search(qry) }}"
  vars:
    qry: '(?<=\/)[a-f0-9]{32}'

使用https://regex101.com/等网站来测试您的表达式。

答案 1 :(得分:0)

正则表达式(?s).*https://.*/([^\r\n]+).*正如我预期的那样正常工作。

也是的,我可以尝试从标准输出的第二行获取最后32个字符但是如果它发生变化我更喜欢来自令牌长度的agnostique,所以正则表达式提取令牌id从输出到我现在的正确方法。