【问题标题】:Emacs search by exact regex match instead of partialEmacs 通过精确的正则表达式匹配而不是部分搜索
【发布时间】:2013-08-30 13:26:58
【问题描述】:

我正在查看c 中的一个非常大的流体动力学代码,其中通常有一些非常糟糕的变量选择。包括一个名为“g”的全局变量。同样,有一个文件包含一个名为“geom”的变量和许多包含子字符串“geom”的其他变量(例如geometry、geomAL、geom_arb 等)。

有什么方法可以搜索与正则表达式完全匹配的变量,而不是部分匹配?

例如:搜索“geom”并不匹配“geomAL”。显然 emacs 不先验知道变量从哪里开始或结束,但这可以构造为 c 模式的函数吗?

【问题讨论】:

标签: regex search emacs


【解决方案1】:

Emacs 正则表达式引擎 (C-M-s <regexp>) 为这类事情提供了各种操作数,例如字边界 \< 和 \> 零宽度断言。所以\<geom\> 将单独匹配geom 并且(取决于您的模式的语法表)可能还匹配geom_something 中的前缀。如果您需要排除下划线后缀,请尝试\<geom\>[^_]。

【讨论】:

  • 对不起,我编辑了这个答案而不是我自己的答案。有没有办法取消编辑?
  • @mvw:被审稿人拒绝。您还可以通过单击“已编辑”链接并在上一个编辑的标题中在不需要的编辑之前查找回滚链接来回滚编辑。
  • 我个人更喜欢 \b 操作数,我觉得这样更容易输入,。
  • @BruceConnor 谢谢!这确实是更愉快一点
【解决方案2】:

您可以使用C-u C-s \_<g\_>,它将使用带有符号边界标记的正则表达式搜索来搜索符号 g。或者在最近的 Emacs 中,您可以执行 M-s _ g ,其效果基本相同(M-s 是“搜索前缀键”,其中 M-s _ 是 isearch-forward-symbol)。

【讨论】:

    【解决方案3】:

    您尝试过 Emacs TAGS 系统吗?它应该能够解析出变量,并且可以提供精确的查找。见这里:http://www.emacswiki.org/emacs/EmacsTags

    使用 etags 助手生成标签表:

    etags *.c  
    

    寻找带有

    的标签
    M-. your-var-name
    

    【讨论】:

      【解决方案4】:

      http://www.emacswiki.org/emacs/RegularExpression 拥有几乎所有你想要使用 emacs 正则表达式的东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多