当前位置:  开发笔记 > 编程语言 > 正文

是否可以更改emacs的regexp语法?

如何解决《是否可以更改emacs的regexp语法?》经验,为你挑选了2个好方法。

我喜欢emacs.我喜欢正则表达式.我讨厌emacs的正则​​表达式语法 - 需要逃避分组的parens和braces,你不要逃避文字的parens,缺少预定义的字符类等.

我可以替换emacs的正则​​表达式引擎,或者调整一些设置,这样当我使用Query-replace-regexp(或许多其他功能之一)时,我可以使用我在java/js/perl/ruby​​/etc中编写的语法...?

编辑: 主题最初是"如何更改emacs'正则表达式引擎",它不仅会更改转义规则并添加字符类,还会(在帖子中未提及)添加对各种常见扩展的支持(?...).像非捕获parens这样的特征:(?:...),只有当/ if-not后跟:(?= ...)/(?!...)等时才匹配.我不相信(虽然很乐意纠正)这些可能与emacs的当前正则表达式引擎,并没有任何语法替换将解决这个问题.

下面的解决方案通过替换语法emacs理解来解决转义和其他char类的原始问题.第二个答案(现已删除)建议建议(添加一个函数在另一个开始时运行)emacs的正则​​表达式函数来替换所有正则表达式处理.作者迅速审查他/她自己意识到它可能会破坏现有的emacs代码,并最终删除了帖子.

我仍然希望将正则表达式引擎更改为支持扩展的引擎,但我同意普遍改变转义行为会造成严重破坏,我不愿意追逐.因此,我正在改变主题以匹配问题并接受回应.

我突然想到改变引擎以支持通用语法和扩展,建议正则表达式函数将emacs内部代码转换为通用语法,建议交互式函数将我的通用语法转换为emacs语法(所以它可以是转换回普通)...但我认为即使是RMS也会在此之前推荐一个分支.



1> Adam Rosenfi..:

您可以定义自己的elisp函数,它修改了正则表达式,然后将其传递回emacs.在伪elisp中:

(defun my-query-replace-regexp (regexp)
    ; modify regexp to replace ( with \(, { with \{, etc.
    (query-replace-regexp modified-regexp)
)

; rebind C-% to use new regexp function
(global-set-key "\C-%" 'my-query-replace-regexp)



2> TooTone..:

如果使用Python正则表达式进行增量搜索/替换,并且对于替换和查询替换就足够了,那么visual-regexp-steroids是一个不错的选择.

visual-regexp-steroids是visual-regexp的扩展,可以使用现代的regexp引擎(不再有逃脱的组括号和其他好东西!)...现在,Python和pcre2el开箱即用(测试时) Linux和Windows).

它默认为Python正则表达式.

一个非常好的功能是实时搜索/替换,例如从开始

one = 1
two = 2
three = 3
four = 4

你可以像这样交换数字和字符串:

在此输入图像描述

它可以通过MELPA轻松安装.我的.emacs是:

(require 'visual-regexp-steroids)
(define-key global-map (kbd "C-c r") 'vr/isearch-backward)
(define-key global-map (kbd "C-c s") 'vr/isearch-forward)
(define-key global-map (kbd "C-c l") 'vr/replace)
(define-key global-map (kbd "C-c q") 'vr/query-replace)

但显然你可以改变以适应,并覆盖内置的键映射,如果你愿意,可以进行搜索和替换.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有