gpt4 book ai didi

regex - 是否可以更改 emacs 的正则表达式语法?

转载 作者:行者123 更新时间:2023-12-02 13:26:53 25 4
gpt4 key购买 nike

我喜欢 emacs。我喜欢正则表达式。我讨厌 emacs 的正则表达式语法 - 需要转义分组括号和大括号,您转义文字括号,缺乏预定义的字符类等。

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

编辑:主题最初是“如何更改 emacs 的正则表达式引擎”,它不仅会更改转义规则并添加字符类,而且(帖子中未提及)添加对各种常见扩展的支持(?...)。诸如非捕获括号之类的功能:(?:...)、仅匹配 if/if-not 后跟:(?=...)/(?!...) 等。我不相信(尽管很高兴得到纠正)这些可以通过 emacs 当前的正则表达式引擎实现,并且任何语法替换都无法解决这个问题。

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

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

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

最佳答案

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

关于regex - 是否可以更改 emacs 的正则表达式语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/879011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com