我试图用M-x replace-regexp替换所有在emacs上的整个单词(比如foo)。Emacs正则表达式字边界(具体涉及下划线)
的问题是,我不想把foo换成的出现在下划线词,如word_foo_word
如果我使用\ bfoo \ b键匹配FOO然后将匹配的下划线串;因为据我所知,emacs认为下划线是字边界的一部分,与其他正则表达式系统(如perl)不同。
什么是正确的处理方式?
感谢
我试图用M-x replace-regexp替换所有在emacs上的整个单词(比如foo)。Emacs正则表达式字边界(具体涉及下划线)
的问题是,我不想把foo换成的出现在下划线词,如word_foo_word
如果我使用\ bfoo \ b键匹配FOO然后将匹配的下划线串;因为据我所知,emacs认为下划线是字边界的一部分,与其他正则表达式系统(如perl)不同。
什么是正确的处理方式?
感谢
您写道:
我了解的emacs认为底线是字边界的一部分,这是其他正则表达式系统
下划线的治疗,如不同emacs中的所有其他内容都是可配置的。这个问题:
How to make forward-word, backward-word, treat underscore as part of a word?
...问相反。
我认为你可以通过改变语法表中下划线的语法来解决你的问题,使它们不是单词的一部分,然后进行搜索/替换。
为此,您需要知道您正在使用的模式以及该模式的语法表的名称。在C++中,这将是这样的:
(modify-syntax-entry ?_ "." c++-mode-syntax-table)
的点表示“标点符号”,这意味着不是一个单词的一部分。欲了解更多信息,请在modify-syntax-entry
上尝试M-x describe-function
。
的正则表达式或\<foo\>
匹配\bfoo\b
仅foo
当它不是由字构成字符之前或之后(syntax codew
,通常是字母数字,所以它在foo_bar
匹配但不是在foo1
)。
由于Emacs 22,正则表达式\_<foo_bar\_>
匹配foo_bar
只有当它没有前或后面有符号组成字符时。符号构成要么是词组成要么是语法为_
的字符。大多数编程模式将_
定义为符号组成部分。
谢谢\ _ <运营商是我一直在寻找的。 – nsimplex 2011-05-10 11:47:59
查看语法表感谢。 – nsimplex 2011-05-10 11:47:28