Emacs的正则表达式不支持负向预查?

Vim、Emacs配置和使用
shada
帖子: 397
注册时间: 2006-09-27 11:17
联系:

Emacs的正则表达式不支持负向预查?

#1

帖子 shada » 2012-02-02 15:07

\(Error\)((?!Mode).)+

想匹配LastError中的Error,而不匹配ErrorMode中的Error。
大虾们,帮忙想个办法呀?
个人博客:http://www.hanghj.com
头像
tangboyun
帖子: 701
注册时间: 2009-07-25 1:57
联系:

Re: Emacs的正则表达式不支持负向预查?

#2

帖子 tangboyun » 2012-02-02 15:22

只要区别这两个的话 用\w和\b的组合来显式指定断词的地方即可。
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。
shada
帖子: 397
注册时间: 2006-09-27 11:17
联系:

Re: Emacs的正则表达式不支持负向预查?

#3

帖子 shada » 2012-02-02 15:39

就是Error后面不能跟Mode,跟其它任何都可以,前面不管。
个人博客:http://www.hanghj.com
头像
tangboyun
帖子: 701
注册时间: 2009-07-25 1:57
联系:

Re: Emacs的正则表达式不支持负向预查?

#4

帖子 tangboyun » 2012-02-02 21:18

http://cx4a.org/hack/emacs-regexp-extension.html
Emacs Regexp Extension

代码: 全选

Lookaround:
    Positive Lookahead \(?=...\)
    Negative Lookahead \(?!...\)
    Positive Lookbehind \(?<=...\)
    Negative Lookbehind \(?<!...\\)

代码: 全选

$ bzr branch http://cx4a.org/repo/emacs.bzr/regexp/
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。
shada
帖子: 397
注册时间: 2006-09-27 11:17
联系:

Re: Emacs的正则表达式不支持负向预查?

#5

帖子 shada » 2012-02-06 20:48

汗,要自己编译就算了。
个人博客:http://www.hanghj.com
头像
Fermat618
帖子: 728
注册时间: 2008-12-28 16:01

Re: Emacs的正则表达式不支持负向预查?

#6

帖子 Fermat618 » 2012-02-07 18:26

vim正则表达式可以做 :em05
爱因斯坦会弹钢琴
爱因斯坦会拉小提琴
爱因斯坦会骑自行车
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: Emacs的正则表达式不支持负向预查?

#7

帖子 eexpress » 2012-02-07 19:28

● man perlre
● 鸣学
头像
josephyoung
帖子: 158
注册时间: 2011-11-05 18:53
来自: 南极圈

Re: Emacs的正则表达式不支持负向预查?

#8

帖子 josephyoung » 2012-02-11 21:34

Fermat618 写了:vim正则表达式可以做 :em05
请问vim里的这个正则怎么写
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: Emacs的正则表达式不支持负向预查?

#9

帖子 kardinal » 2012-02-12 1:12

shada 写了:\(Error\)((?!Mode).)+

想匹配LastError中的Error,而不匹配ErrorMode中的Error。
大虾们,帮忙想个办法呀?
交互的时候输入这么长的正则纯属自虐
编程的时候总可以通过其它办法来解决,
最简单的,把errormode替换成其它未出现的过词,再处理其它 error
完事再替换回来
头像
Fermat618
帖子: 728
注册时间: 2008-12-28 16:01

Re: Emacs的正则表达式不支持负向预查?

#10

帖子 Fermat618 » 2012-02-12 21:34

josephyoung 写了:
Fermat618 写了:vim正则表达式可以做 :em05
请问vim里的这个正则怎么写

代码: 全选

Error\(Mode\)\@!
爱因斯坦会弹钢琴
爱因斯坦会拉小提琴
爱因斯坦会骑自行车
shada
帖子: 397
注册时间: 2006-09-27 11:17
联系:

Re: Emacs的正则表达式不支持负向预查?

#11

帖子 shada » 2012-02-13 16:44

kardinal 写了:交互的时候输入这么长的正则纯属自虐
编程的时候总可以通过其它办法来解决,
最简单的,把errormode替换成其它未出现的过词,再处理其它 error
完事再替换回来
不是交互,我是在写一个log-mode,替换法可以解决问题,但是不优雅。
我想想其它办法。
个人博客:http://www.hanghj.com
头像
tangboyun
帖子: 701
注册时间: 2009-07-25 1:57
联系:

Re: Emacs的正则表达式不支持负向预查?

#12

帖子 tangboyun » 2012-02-13 16:47

那就装那个插件罗,装插件还不是稀松平常地事。
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。
头像
josephyoung
帖子: 158
注册时间: 2011-11-05 18:53
来自: 南极圈

Re: Emacs的正则表达式不支持负向预查?

#13

帖子 josephyoung » 2012-02-13 18:20

Fermat618 写了:
josephyoung 写了: 请问vim里的这个正则怎么写

代码: 全选

Error\(Mode\)\@!
我试了下匹配不出来,请问您这个里面的@!是什么意思,我没有见过正则里这种用法
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: Emacs的正则表达式不支持负向预查?

#14

帖子 kardinal » 2012-02-13 20:54

shada 写了:
kardinal 写了:交互的时候输入这么长的正则纯属自虐
编程的时候总可以通过其它办法来解决,
最简单的,把errormode替换成其它未出现的过词,再处理其它 error
完事再替换回来
不是交互,我是在写一个log-mode,替换法可以解决问题,但是不优雅。
我想想其它办法。
针对特定的问题,其实可以自己弄个解析引擎。正则这种通用搜索引擎效率并不高,带负向预查的正则效率就更低了
头像
lilydjwg
论坛版主
帖子: 4250
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: Emacs的正则表达式不支持负向预查?

#15

帖子 lilydjwg » 2012-02-15 21:54

kardinal 写了:
shada 写了:
kardinal 写了:交互的时候输入这么长的正则纯属自虐
编程的时候总可以通过其它办法来解决,
最简单的,把errormode替换成其它未出现的过词,再处理其它 error
完事再替换回来
不是交互,我是在写一个log-mode,替换法可以解决问题,但是不优雅。
我想想其它办法。
针对特定的问题,其实可以自己弄个解析引擎。正则这种通用搜索引擎效率并不高,带负向预查的正则效率就更低了
有些问题并不需要太高的效率,通用性反而比较重要。比如在配置里用正则的时候。总不可能为了本来正则能搞定的事去动用 lex 它们吧。
回复