有没有可能改变emacs的regexp语法?

我爱emacs。 我喜欢正则表达式。 我讨厌emacs的正则​​表达式语法 - 需要避免分组parens和大括号,你不逃避字面parens,缺乏预定义的字符类,等等。

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

编辑:该主题最初是“如何更改emacs的正则​​表达式引擎”,它不仅会改变转义规则并添加字符类,还会(在后文中未提及)添加对各种常见扩展(?...)的支持。 像非捕获的parens的特点:(?:...),只有/ if-之后才会匹配:(?= ...)/(?!...)等。 我不相信(虽然很高兴被纠正),但emacs当前的正则表达式引擎可能会有这些功能,并且没有任何语法替换可以解决这个问题。

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

我仍然希望将正则表达式引擎更改为支持扩展的引擎,但我同意通用地更改转义行为会导致我不想追逐的破坏。 因此,我正在改变主题以匹配问题并接受答复。

它改变了引擎以支持通用语法和扩展,建议使用regex函数将emacs内部代码转换为通用语法,建议交互功能将我的通用语法转换为emacs语法(因此它可以是转换回普通)......但我认为即使RMS在此之前也会推荐一个分支。


你可以定义你自己的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)

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

visual-regexp-steroids是visual-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)

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

链接地址: http://www.djcxy.com/p/76973.html

上一篇: Is it possible to change emacs' regexp syntax?

下一篇: regex greedy match ends with character or end of string