在 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。)
这意味着您可以轻松选择与 x
和 y
匹配的所有缓冲区。或者,如果您想要所有匹配 x
或 y
的内容,只需将那些匹配 y
的内容添加到您标记为匹配 x< 的缓冲区中即可
.
鉴于标记或“保存”的缓冲区集,您可以使用 Icicles search 在其中搜索 foo
或普通的 Isearch。
另一方面,如果您只想找到与 foo
以及 x
或 y
匹配的缓冲区,那么只需使用C-x b
。另请注意,用于查找缓冲区的最后一个内容匹配模式(例如,foo
)会自动保存为最后一个 Isearch 正则表达式。因此,当您访问缓冲区时,您可以立即使用 C-M-s
搜索单个事件。
关于regex - 如何进行复杂的多缓冲区搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20868492/