【发布时间】:2010-10-27 02:42:44
【问题描述】:
我喜欢 emacs。我喜欢正则表达式。我讨厌 emacs 的正则表达式语法 - 需要转义分组括号和大括号,不要转义文字括号,缺少预定义的字符类等。
我可以替换 emacs 的正则表达式引擎,或者调整一些设置,以便当我使用 Query-replace-regexp(或许多其他功能之一)时,我可以使用我在 java/js/perl/ 中编写的语法红宝石/等...?
编辑: 该主题最初是“如何更改 emacs 的正则表达式引擎”,它不仅会更改转义规则并添加字符类,还会(帖子中未提及)添加对各种常见扩展的支持(?...)。诸如非捕获括号之类的功能:(?:...),仅当/如果-不匹配时才匹配:(?=...)/(?!...) 等。我不相信(尽管很高兴得到纠正)这些在 emacs 当前的正则表达式引擎中是可能的,并且没有任何语法替换可以解决这个问题。
下面的解决方案通过替换为 emacs 理解的语法来解决转义和附加 char 类的原始问题。第二个答案(现已删除)建议建议(添加一个在另一个开头运行的函数)emacs 的正则表达式函数来替换所有正则表达式处理。作者很快审查了他/她自己,意识到这可能会破坏许多现有的 emacs 代码,最终该帖子被删除。
我仍然想将正则表达式引擎更改为支持扩展的引擎,但我同意普遍更改转义行为会造成严重破坏,我不愿意追逐。因此,我正在更改主题以匹配问题并接受回复。
我想到要更改引擎以支持通用语法和扩展,建议正则表达式函数将 emacs 内部代码转换为通用语法,建议交互式函数将我的通用语法转换为 emacs 语法(所以它可以转换回普通的)......但我认为即使是 RMS 也会在此之前推荐一个 fork。
【问题讨论】:
-
在最严格的解释中——当然,emacs 是开源的。但从实际的角度来看,我不知道。
-
主题有点误导。您真的不想更改正则表达式引擎(NFA 或 DFA),而只想更改您必须输入的语法。那是完全不同的事情。
-
相关线程:PERL 和 Emacs 的正则表达式语法比较 - stackoverflow.com/questions/1946352/…
标签: regex emacs syntax advising-functions