【问题标题】:Why is PCRE grep treating forward slashes as whitespace?为什么 PCRE grep 将正斜杠视为空格?
【发布时间】:2021-04-24 05:18:44
【问题描述】:

在 bash 上,我试图在空格后立即获取大写字母(A 来自 File A.jpg)。

echo "Path/To/File A.jpg" | grep -oP '[A-Z](?!/s)'

这是一个否定的前瞻(?!,它应该在空格之后返回任何大写字母。所以,它应该只返回A。但是,它返回所有大写:

P
T
F
A

它似乎将正斜杠视为空格?为什么?我怎样才能只得到最后一个A

【问题讨论】:

  • 我建议'(?<= )[A-Z]'' \K[A-Z]'

标签: grep pcre regex-lookarounds positive-lookbehind


【解决方案1】:

应该在空格后返回任何大写字母

不,它根本不是这么说的。它说“任何不跟斜杠和 s 的大写字母。”好吧,none 紧随其后。所以你得到了所有的大写字符。

你想要的是积极的回顾。

(?<=\s)[A-Z]

【讨论】:

    【解决方案2】:

    将 grep 与 -P 一起使用,您可以使用 \h 匹配水平空白字符,并且正如 cmets 中所指出的,您可以使用 \K 清除匹配缓冲区,然后匹配单个大写字符 A-Z。

    echo "Path/To/File A.jpg" | grep -oP '\h\K[A-Z]'
    

    输出

    A
    

    【讨论】:

      猜你喜欢
      • 2016-03-12
      • 2021-07-13
      • 2010-12-07
      • 1970-01-01
      • 2015-01-27
      • 2014-09-28
      • 2021-11-16
      相关资源
      最近更新 更多