我正在为自己写一个小帮手函数,我想做的其中一件事就是根据正则表达式进行替换。 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的函数只处理整个缓冲区,而我需要转换它所放置的一些文本。
答案 0 :(得分:3)
如果您要查看此函数的说明(C-h f replace-regexp-in-string
),您会注意到捕获被指定为\\(regex\\)
,并被称为\\1
等。请参阅说明Emacs's regular expressions - 它们与Perl& POSIX正则表达式。
您还可以查看适用于缓冲区的其他函数,例如in my config。