Regex 搜索多行正则表达式

Regex 搜索多行正则表达式,regex,emacs,multiline,Regex,Emacs,Multiline,我有几个源文件,它们的函数定义如下 ReturnType ClassName:: FunctionName(FunctionArgs...) { .... } ReturnType ClassName::NestedClassName:: FunctionName(FunctionArgs...) { .... } 我想快速浏览这些文件,分别列出第一类和第二类的所有函数。有没有办法在emacs中实现这一点? 注意:我从[]尝试过C-q C-j。它不起作用。这似乎有两个相互关联的部分:要使

我有几个源文件,它们的函数定义如下

ReturnType ClassName::
FunctionName(FunctionArgs...)
{
 ....
}

ReturnType ClassName::NestedClassName::
FunctionName(FunctionArgs...)
{
 ....
}
我想快速浏览这些文件,分别列出第一类和第二类的所有函数。有没有办法在emacs中实现这一点?
注意:我从[]尝试过C-q C-j。它不起作用。

这似乎有两个相互关联的部分:要使用的regexp和搜索方法。我做了以下假设(很抱歉没有事先澄清这些;我没有足够的代表发表评论):

  • 您感兴趣的只是收集函数签名(前两行),而不是大括号中的内容
  • 冒号从不出现在返回类型或类名中
  • 函数体中没有以双冒号结尾的行
  • 在Emacs中,我可以用regexp区分这两种情况

    ^[^:]+::\n.+$
    ^[^:]+::[^:]+::\n.+$
    
    (在交互式用法中,您将用实际换行符(例如通过C-q C-j)替换
    \n

    如果您在Emacs中打开了所有缓冲区,您可以立即使用
    multi-occurrent
    。否则,您可以使用
    grep
    命令调用grep,或者直接使用M-!调用grep

    如果您使用的是grep,那么您需要一种不同的方法(或者至少我找不到合适的regexp),一切似乎都正常工作。出于某种原因,您还需要退出+运算符。以下是生成的命令:

    grep -A 1 "^[^:]\+::$" files
    grep -A 1 "^[^:]\+::[^:]\+::$" files