我有这段代码来查找区域中的空字符串。
(defun replace-in-region (start end)
(interactive "r")
(let ((region-text (buffer-substring start end))
(temp nil))
(delete-region start end)
(setq temp (replace-regexp-in-string "\\_>" "X" region-text))
(insert temp)))当我在一个区域上使用它时,不管该区域的内容如何,它都会擦除它,并给出错误"Args超出范围: 4,4“。
在包含以下内容的区域中使用query-replace-regexp时:
abcd abcd
abcd 11.11被regexp \_> (注意,只有一个反斜杠)和rep X替换后的结果区域是:
abcdX abcdX
abcdX 11.11X我在这里错过了什么?
发布于 2016-05-20 14:58:17
它看起来像replace-regexp-in-string中的一个bug。
它首先匹配原始字符串中的regexp。例如,它找到了"abcd“的结尾。然后,它选择匹配的子字符串,并且,由于某些原因,我不知道,在子字符串上重做匹配。在这种情况下,匹配失败(因为它不再跟随一个单词),但是后面的代码假设它成功了,并且匹配数据已经更新。
请将此报告为使用M-x report-emacs-bug的错误。
我建议您用一个简单的循环替换对replace-regexp-in-string的调用。实际上,我建议您不要剪掉字符串并执行如下操作:
(defun my-replace-in-region (start end)
(interactive "r")
(save-excursion
(goto-char start)
(setq end (copy-marker end))
(while (re-search-forward "\\_>" end t)
(insert "X")
;; Ensure that the regexp doesn't match the newly inserted
;; character.
(forward-char))))https://stackoverflow.com/questions/37348248
复制相似问题