如何在elisp函数中使用regexp替换字符串?

时间:2013-04-26 17:22:23

标签: regex emacs elisp

我正在为自己写一个小帮手函数,我想做的其中一件事就是根据正则表达式进行替换。 replace-regexp-in-string看起来像个好人。但是,我无法用捕获替换它。以下是我根据emacs wiki尝试的所有内容:

(replace-regexp-in-string "a(b)c" "d\0f" "abc")
(replace-regexp-in-string "a(b)c" "d \0 f" "abc")
(replace-regexp-in-string "a(b)c" "d\\0f" "abc")
(replace-regexp-in-string "a(b)c" "d \\0 f" "abc")
(replace-regexp-in-string "a(b)c" "d\1f" "abc")
(replace-regexp-in-string "a(b)c" "d \1 f" "abc")
(replace-regexp-in-string "a(b)c" "d\\1f" "abc")
(replace-regexp-in-string "a(b)c" "d \\1 f" "abc")

以上所有似乎都评价为“abc”,这让我很困惑。对于d\0f,我希望结果为“dbf”。我开始怀疑这个功能不会捕获。

这样做的正确方法是什么?或者,一般来说,这样做的方法是什么?很多处理替换regexp的函数只处理整个缓冲区,而我需要转换它所放置的一些文本。

1 个答案:

答案 0 :(得分:3)

如果您要查看此函数的说明(C-h f replace-regexp-in-string),您会注意到捕获被指定为\\(regex\\),并被称为\\1等。请参阅说明Emacs's regular expressions - 它们与Perl& POSIX正则表达式。

您还可以查看适用于缓冲区的其他函数,例如in my config