regex - 如何使用vim/grep否定 future

标签 regex vim grep

我能够在regxr.com上构建我的Regex

/.*GET.*(?!(Chrome)).*"$/

我希望我的正则表达式与此行不匹配:
node_lum.log:C3 2019-04-15 15:00:28.954 NOTICE: 6ms 77.172.180.249 GET /users/zone/active.json?customer_name=hl_e5d4a218 HTTP/1.1 200 - - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"

并匹配这个
node_lum.log:C3 2019-04-15 15:00:28.954 NOTICE: 6ms 77.172.180.249 GET /users/zone/active.json?customer_name=hl_e5d4a218 HTTP/1.1 200 - - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) asd/73.0.3683.103 Safari/537.36"

我试过同时使用vim和grep。

在vim上,我尝试了
/*GET.*\(Chrome\)\@!.*"$
/*GET.*\(\(Chrome\)\)\@!.*"$

在grep上,我尝试了
grep -P '.*GET.*(?!(Chrome)).*"$' ./grep.txt
grep -P '.*GET.*(?!Chrome).*"$' ./grep.txt

这些都没有给我我想要的比赛

最佳答案

grep中,您应该删除第一个.*(这是多余的),并确保下一个.*位于负前瞻范围内:

GET(?!.*Chrome).*"$
      ^^

参见regex demoRegulex graph:

enter image description here

详细信息
  • GET-一个GET子字符串
  • (?!.*Chrome)-除rbeak字符以外的任何0+字符后,不允许Chrome字符
  • .*"$-尽可能多的除换行符以外的任何0+字符,并且必须在行尾添加"

  • 在Vim中,它看起来像
    GET\(.*Chrome\)\@!.*"$
    
    \(.*Chrome\)\@!是负的超前提前量。

    关于regex - 如何使用vim/grep否定 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55696429/

    相关文章:

    javascript - 我如何检查我的正则表达式值是否正确?

    linux - 编译错误或警告将在 VIM 中关闭项目

    linux - 使用 grep/sed/awk 其他在 unix 中过滤文件?

    javascript - Jquery 验证器 - 没有空格条目

    javascript - 用正则表达式计算括号

    php - TinyMce - 在最后一个标签末尾附加一个句点

    linux - 如何阻止我的 VIM 背景在没有文本的 tmux 中透明?

    在 ~/.vim/上找不到 OS X 10.8 Mountain Lion 上的 VIM 安装

    regex - 如何删除字符串第一次出现之前和最后一次出现之后的所有行?

    git - 如何在git repo中grep文件?