emacs正则表达式不符合预期

时间:2013-05-08 02:56:41

标签: regex emacs

我试图匹配以下文字:

void foo( int xxx,
int const & xxx,

使用正则表达式:

\(\s-+\)[^\s-]+,$

IE:匹配空格,后跟非空格,后跟行尾的一个逗号

预期比赛:

[space]xxx, (line 1)
[space]xxx, (line 2)

实际匹配:

[space]foo( int xxx, (line 1)
[space]& xxx, (line 2)

为什么emacs与空格midstring匹配,即使我已指定'没有空格'?

2 个答案:

答案 0 :(得分:3)

替代字符[^\s-]匹配\s-以外的任何内容。

请参阅[ ... ]中的“C-h i g (elisp) Regexp Special RET”。

而不是那样,您希望使用\S-(大写)作为\s-的倒数 (C-h i g (elisp) Regexp Backslash RET)。

或者,如果您仍然需要/需要替换字符,请使用字符类
C-h i g (elisp) Char Classes RET)。

答案 1 :(得分:0)

这是因为你没有将正则表达式锚定到行的开头。所以在你以后的两个案例中:

[space]foo([space]int[space]xxx, (line 1)
[space]&[space]xxx, (line 2)

它只匹配[space]xxx,

尝试^\(\s-+\)[^\s-]+,$(或者,当写成Emacs Lisp字符串时:"^\\(\\s-+\\)[^\\s-]+,$"