Emacs通过精确的正则表达式匹配而不是部分匹配

时间:2013-08-30 13:26:58

标签: regex search emacs

我正在查看c中非常大的流体动力学代码,该代码通常有一些非常差的变量选择。包括一个名为'g'的全局变量。类似地,有一个文件带有一个名为'geom'的变量和许多其他包含子串'geom'的变量(例如geometry,geomAL,geom_arb等)。

有没有办法搜索与正则表达式完全匹配的变量,而不是部分?

例如:搜索'geom'匹配'geomAL'。显然,emacs不会先验知道变量的开始或结束位置,但是这可以构建为c模式的函数吗?

4 个答案:

答案 0 :(得分:7)

Emacs正则表达式引擎( CMs <regexp>)具有各种操作数,例如单词边界\<\>零 - 宽度断言。因此,\<geom\>将单独匹配geom并且(取决于您的模式的语法表)也可能是geom_something中的前缀。如果您需要排除下划线后缀,请尝试\<geom\>[^_]

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

使用etags帮助程序生成标签表:

etags *.c  

使用

查找标签
M-. your-var-name

答案 3 :(得分:1)

如果您想使用emacs regexp,

http://www.emacswiki.org/emacs/RegularExpression几乎可以满足您的所有需求。