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

Vim、Emacs配置和使用
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

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

#16

帖子 kardinal » 2012-02-15 22:11

关键是他的这个问题 emacs 的正则不好办啊
要不给点提示?
头像
lilydjwg
论坛版主
帖子: 4250
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

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

#17

帖子 lilydjwg » 2012-02-15 22:46

kardinal 写了:关键是他的这个问题 emacs 的正则不好办啊
要不给点提示?
要是 Emacs 真的办不到的话就只能想别的办法了。这么来说 Emacs 的正则不是很强大?不知道效率上会不会飞快呢。
头像
Fermat618
帖子: 728
注册时间: 2008-12-28 16:01

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

#18

帖子 Fermat618 » 2012-02-15 23:00

kardinal 写了:关键是他的这个问题 emacs 的正则不好办啊
要不给点提示?
那你用Emacs的方法来实现一个呗。自定义个匹配函数,先用原来的字符匹配方法找到Error,再找出Error后面的四个字母,如果这四个字母恰好是,“Mode",那么就不匹配这个。
爱因斯坦会弹钢琴
爱因斯坦会拉小提琴
爱因斯坦会骑自行车
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

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

#19

帖子 kardinal » 2012-02-15 23:43

lilydjwg 写了:
kardinal 写了:关键是他的这个问题 emacs 的正则不好办啊
要不给点提示?
要是 Emacs 真的办不到的话就只能想别的办法了。这么来说 Emacs 的正则不是很强大?不知道效率上会不会飞快呢。
正则只是方便而已,就算 perl 的正则,肯定也有不能处理的问题吧
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

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

#20

帖子 kardinal » 2012-02-15 23:46

Fermat618 写了:
kardinal 写了:关键是他的这个问题 emacs 的正则不好办啊
要不给点提示?
那你用Emacs的方法来实现一个呗。自定义个匹配函数,先用原来的字符匹配方法找到Error,再找出Error后面的四个字母,如果这四个字母恰好是,“Mode",那么就不匹配这个。
不知道他的应用情景,比如渲染语法高亮的话,接口只接受正则表达式,那就不太好弄
头像
Fermat618
帖子: 728
注册时间: 2008-12-28 16:01

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

#21

帖子 Fermat618 » 2012-02-16 0:07

kardinal 写了:
Fermat618 写了:
kardinal 写了:关键是他的这个问题 emacs 的正则不好办啊
要不给点提示?
那你用Emacs的方法来实现一个呗。自定义个匹配函数,先用原来的字符匹配方法找到Error,再找出Error后面的四个字母,如果这四个字母恰好是,“Mode",那么就不匹配这个。
不知道他的应用情景,比如渲染语法高亮的话,接口只接受正则表达式,那就不太好弄
如果不需要控制匹配始点终点或者有另外的方式控制它的话,也还是有办法的。先把Error匹配了,后面的再分四支,第一去是不以M开头的,第二支是M后不掉o的,第三支是Mo后面不接d的,第四支是Mod后面不接e的。这个方法原比使用那个所谓的向后环视要丑。
爱因斯坦会弹钢琴
爱因斯坦会拉小提琴
爱因斯坦会骑自行车
头像
gamesun
帖子: 119
注册时间: 2010-09-06 14:25

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

#22

帖子 gamesun » 2013-04-18 19:09

tangboyun 写了: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/
这个方法可以,但是不适用现在的Emacs 24版本,这里有针对Emacs 24.2的环视补丁:
http://www.cnblogs.com/gamesun/archive/ ... 93382.html
shada
帖子: 397
注册时间: 2006-09-27 11:17
联系:

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

#23

帖子 shada » 2014-08-05 16:51

kardinal 写了:
Fermat618 写了:
kardinal 写了:关键是他的这个问题 emacs 的正则不好办啊
要不给点提示?
那你用Emacs的方法来实现一个呗。自定义个匹配函数,先用原来的字符匹配方法找到Error,再找出Error后面的四个字母,如果这四个字母恰好是,“Mode",那么就不匹配这个。
不知道他的应用情景,比如渲染语法高亮的话,接口只接受正则表达式,那就不太好弄
你说对了,制作日志高亮脚本。
个人博客:http://www.hanghj.com
shada
帖子: 397
注册时间: 2006-09-27 11:17
联系:

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

#24

帖子 shada » 2014-08-05 16:52

gamesun 写了:
tangboyun 写了: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/
这个方法可以,但是不适用现在的Emacs 24版本,这里有针对Emacs 24.2的环视补丁:
http://www.cnblogs.com/gamesun/archive/ ... 93382.html
已经转vim了。
个人博客:http://www.hanghj.com
回复