【问题标题】:Matching character between characters字符之间的匹配字符
【发布时间】:2013-11-08 11:19:19
【问题描述】:

我正在尝试匹配一个字符,例如} 在 c 文件中,但不应介于两者之间 引用例如"}""fdjskfhjds } 543897dhfhd92-()*&$"。 如何使用 grep 形成正则表达式?

我现在返回 0 个匹配项的是:

grep '"[^"]* { [^"]*"'

这个想法是匹配“”之间的字符{。 (我需要 not ^ 同时获得更多双引号匹配)

如果使用其他标准 unix 工具可以更轻松地完成,欢迎使用解决方案!

【问题讨论】:

    标签: python perl unix awk grep


    【解决方案1】:

    使用环视断言 grep -P '(?!.*")\}(?!.*")'

    下面的例子只找到“more”和“blah”之间的“}”

    echo 'blah"}"more}blah' | grep -P '(?!.*")\{(?!.*")'

    【讨论】:

      【解决方案2】:

      假设您的 grep 版本支持 PCRE,您可以说:

      '(?<=[^"])}(?=[^"]?)'
      

      例如,

      $ echo 'foo}bar"}"baz}' | grep -P '(?<=[^"])}(?=[^"]?)'
      foo}bar"}"baz}
         ^         ^      <== The carets denote the matched }
      

      【讨论】:

      • 注意:当我尝试这个时,它只适用于 "}" 而不是 "some}words" 粘贴到 Ubuntu 13.10 时
      猜你喜欢
      • 2013-12-28
      • 2013-04-26
      • 1970-01-01
      • 2020-11-13
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多