我喜欢emacs。我也喜欢正则表达式。但是我讨厌emacs的正则表达式语法 - 需要转义成组的括号和花括号,不能转义字面意义的括号,缺乏预定义字符类等。
我能否替换掉emacs的正则表达式引擎或者调整一些设置,以便在使用Query-replace-regexp(或其他许多)功能时,我可以使用java/js/perl/ruby等编程语言中使用的语法?
编辑: 原标题为“如何更改emacs的正则表达式引擎”,这不仅会改变转义规则和添加字符类,还会(在帖子中未提到)添加对各种常见扩展(?…)的支持。例如非捕获组:(?:...)、只有当/如果不是后面跟着:(?=...)/(?!...),等等。我认为(虽然很高兴被纠正)这些都不可能在emacs当前的正则表达式引擎中实现,无论做多少语法替换都无济于事。
下面的解决方案通过用emacs理解的语法替换来解决了原始问题的转义和附加字符类。第二个答案(现已删除)建议给emacs的正则表达式函数增加一个advice函数,以便在所有正则表达式处理中执行替换。作者迅速自我审查,意识到这可能会破坏很多现有的emacs代码,最终删除了该帖子。
我仍然想更改正则表达式引擎以支持扩展功能,但我同意普遍更改转义行为会造成我不愿意去解决的混乱。因此,我将主题更改为与问题匹配,并接受该回答。
我考虑过更改引擎以支持通用语法和扩展功能,建议正则表达式函数将emacs内部代码转换为通用语法,建议交互函数将我的通用语法转换为emacs语法(以便可以再次转换为通用语法)……但我认为即使是RMS也会建议首先进行分支。