我能够在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 demo和Regulex graph:
详细信息
GET
-一个GET
子字符串(?!.*Chrome)
-除rbeak字符以外的任何0+字符后,不允许Chrome
字符.*"$
-尽可能多的除换行符以外的任何0+字符,并且必须在行尾添加"
。 在Vim中,它看起来像
GET\(.*Chrome\)\@!.*"$
\(.*Chrome\)\@!
是负的超前提前量。
关于regex - 如何使用vim/grep否定 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55696429/