emacs贪婪向后搜索regexp



如何使emacs中的向后regexp搜索贪婪?

例如,我的缓冲区中有abc 163439 abc,并使用以下正则表达式运行M-x向后搜索正则表达式163439|3。此regexp将始终在缓冲区中找到"3",但更新整个长数字。因为,当它开始搜索时,它会首先遇到"3"。在第二次尝试中,它将从数字内部的"3"位置开始,并将省略它。

如何找到最长、最接近的匹配?

所以我的意思是,当它遇到"3"时,我希望它检查匹配的部分是否不是更大匹配的部分。

我认为你不能随心所欲。

Emacs向后搜索regexp搜索与正则表达式匹配的最近实例。这与贪婪无关(正则表达式中的贪婪是指当存在kleene星形运算符或其语法变体?或+时,匹配尽可能多的字符(。

在您的示例中,emacs正确地找到了与正则表达式匹配的第一个实例。

--dmg

几年前当被问及时,答案是:它还没有实现。

也许试试这个:

(defun ar-greedy-search-backward-regexp (regexp)
  "Match backward the whole expression as search-forward would do. "
  (interactive (list (read-from-minibuffer "Regexp: " (car kill-ring))))
  (let (last)
    (when (re-search-backward regexp nil t 1)
      (push-mark)
      (while (looking-at regexp)
        (setq last (match-end 0))
        (forward-char -1))
      (forward-char 1)
      (push-mark)
      (goto-char last)
      (exchange-point-and-mark))))

正如dmg所说,在某种程度上你"不能"做到:Emacs的regexp引擎只匹配正向,所以"反向"部分只适用于搜索,而不适用于匹配。你最好的办法通常是更改正则表达式,以免依赖贪婪。例如,使用<(?:163439|3)

最新更新