regex - 如何进行复杂的多缓冲区搜索?

标签 regex emacs elisp icicles

在 Python 的正则表达式方言(正确的术语?)中,我们有 (?<=...) 它可用于缩小给定模式之前的搜索范围。

在 Emacs 上尝试执行一些复杂的多缓冲区搜索,例如仅搜索内容包含 "x" 的缓冲区和/或 "y"然后在匹配缓冲区的内容中搜索 "foo"并列出结果,但没有取得成果:

(multi-occur-in-matching-buffers "." "\\(?<=:x\\|y\\)foo")

没有匹配任何内容。

Regexp Syntax Summary声明它不可用 GNU Emacs/Elisp。

如何解决这个问题?

最佳答案

这很容易使用 Icicles .

  • C-x b,用于选择缓冲区,还可以让您通过其 contents matching 进行选择您的输入模式(可以是正则表达式)。这是一个multi-command ,这意味着您可以通过一次使用 C-x b 选择任意数量的缓冲区。

  • Progressive completion允许您使用任意数量的模式(例如正则表达式),将它们组合起来以获得它们的交集(anding)。您还可以减去其他模式的匹配项(互补)。

  • 您可以“标记”或“保存”所选缓冲区,作为一组 saved completion candidates 。 (您甚至可以保存这样一组persistently。)

这意味着您可以轻松选择与 xy 匹配的所有缓冲区。或者,如果您想要所有匹配 xy 的内容,只需将那些匹配 y 的内容添加到您标记为匹配 x< 的缓冲区中即可.

鉴于标记或“保存”的缓冲区集,您可以使用 Icicles search 在其中搜索 foo或普通的 Isearch。

另一方面,如果您只想找到与 foo 以及 xy 匹配的缓冲区,那么只需使用C-x b。另请注意,用于查找缓冲区的最后一个内容匹配模式(例如,foo)会自动保存为最后一个 Isearch 正则表达式。因此,当您访问缓冲区时,您可以立即使用 C-M-s 搜索单个事件。

关于regex - 如何进行复杂的多缓冲区搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20868492/

相关文章:

regex - 使用正则表达式和 sed 替换文件中的字符串

javascript - 在没有不必要空格的情况下替换句子中的单词?

正则表达式在两个字符串中间查找刺痛

unit-testing - 使用 Erlang 进行单元测试时如何自动重新加载模块?

macos - 如何在 Mac OS X 上的 Emacs 中编写波浪号 (~) 字符?

emacs - 在 Emacs Lisp 中使用 obarray 而不是哈希表有什么好处吗?

python - 有没有更好的方法来查找使用正则表达式找到的表达式的右括号?

debugging - elisp `trace-function` 不产生跟踪

emacs - 函数名称中的双减号 (--) 约定在 Emacs Lisp 中意味着什么

xml - 在 emacs XML 模式下,如何漂亮地格式化 XML 模式文件?