【问题标题】:Regex for select middle word separate by space选择中间词的正则表达式,以空格分隔
【发布时间】:2020-04-23 08:44:02
【问题描述】:

我想选择以“/”开头的单词,该单词位于该行中的某个位置

示例

30 8 * * * /root/something > /dev/null 2>&1
30 8 * * * usr/bin/php /home/php/script/run.php

我要匹配

/root/something
/home/php/script/run.php

我的正则表达式根本不起作用(使用 Ansible)

regex_findall('\\s(/.*)')

并给出这样的输出

/root/something > /dev/null 2>&1
/home/php/script/run.php"

【问题讨论】:

    标签: regex ansible


    【解决方案1】:

    你可以使用

    r'\s(/\S+).*'
    

    regex demo

    它将匹配一个空格 (\s),然后将捕获 /,然后将任何 1+ 个非空格字符 (\S+) 捕获到第 1 组中,然后将匹配该行的其余部分(使用 @ 987654327@).

    另一个想法:匹配序列/,然后匹配/以外的1+个字符,如果不是以/dev/null开头:

    r'(?<!\S)(?!/dev/null)(?:/[^/\s]+)+'
    

    这将匹配

    • (?&lt;!\S) - 空格或字符串开头应立即出现在左侧
    • (?!/dev/null) - 不允许 /dev/null 紧跟当前位置的右侧
    • (?:/[^/\s]+)+ - 出现 1 次或多次
      • / - 一个 / 字符
      • [^/\s]+ - 除了/ 和空格之外的 1+ 个字符。

    this regex demo

    【讨论】:

      猜你喜欢
      • 2021-06-14
      • 2016-09-15
      • 2015-09-10
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 2021-07-10
      相关资源
      最近更新 更多