如何在Emacs中交互地练习搜索和替换正则表达式?


12

对于可以例行执行这些操作的Emacs用户而言,使用正则表达式进行搜索和替换显然是一个功能强大的工具。但是,作为Emacs(和/或编程)的初学者,需要学习和练习正则表达式。

与内置的Emacs教程类似,我可以在Emacs中以交互方式学习和训练正则表达式吗?如果没有,还有什么其他建议可以利用Emacs来练习使用正则表达式进行搜索和替换?


1
该文档有点完整:wikemacs.org/wiki/Regexp
Ehvince 2014年

Answers:



16

您可以尝试M-x regexp-builder RET使用交互式正则表达式匹配器,这还不错


7
C-g您没有按预期退出时,不要惊慌。C-c C-q完成练习后,是退出regexp构建器的默认键绑定。
nispio 2014年

5

我使用regexp-builder它可以让您交互式地测试正则表达式并获得反馈。当然,当我开始使用它时,我立即问自己:“如何将这个正则表达式输入query-replace-regexp?”

我选择的答案是EmacsWiki ReBuilder页面上定义的以下函数。

(defun reb-query-replace (to-string)
  "Replace current RE from point with `query-replace-regexp'."
  (interactive
   (progn (barf-if-buffer-read-only)
          (list (query-replace-read-to (reb-target-binding reb-regexp)
                                       "Query replace"  t))))
  (with-current-buffer reb-target-buffer
    (query-replace-regexp (reb-target-binding reb-regexp) to-string)))

所以我的工作流程是:

  1. M-x re-builder
  2. 类型类型类型
  3. M-x reb-query-replace

3

当学习使用正则表达式来查看正则表达式的哪个部分(尤其是正则表达式组)相匹配时,这可能是一个巨大的帮助。并以交互方式和增量方式进行。

按照@immerr的回答,很长一段时间以来,冰柱搜索都具有类似的突出显示

在此处输入图片说明




1

作为Dave F的替代方法,regexp-builder您还可以创建任意文本来练习模式匹配。

此命令最有用的功能是,在创建模式时它将突出显示缓冲区中的匹配项,以帮助您确保正确的模式匹配项。

使用(query-replace-regexp)C-M-%)并创建正则表达式来执行所需的替换将有助于您练习。


这对于希望“练习” regexp-builder尚未提供的正则表达式的人有什么好处?问题query-replace-regexp在于您需要编写一个完整的正则表达式,然后提交给它以找出它匹配的内容。如果您不满意结果,则必须重新开始。 regexp-builder实时显示匹配项,如果您不知道自己在做什么,则可以更轻松地调整正则表达式,直到它起作用为止。
nispio 2014年

1
我承认这是它的缺点。但是,如果你熟悉使用正则表达式query-replace-regexp将让你用来在Emacs中使用它专门
乔纳森水蛭丕平

也许...但是它似乎与OP的要求不符。“如果您熟悉正则表达式,”那么您根本就不需要学习正则表达式。
nispio 2014年

1
OP询问如何作为Emacs初学者学习如何/何时以交互方式使用它们。他们可能已经从其他类型的正则表达式中获得了一些正则表达式知识。
Jonathan Leech-Pepin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.