2

我正在尝试匹配以下文本:

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 仍会匹配中间字符串的空格?

4

2 回答 2

4

替代字符[^\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)。

于 2013-05-08T03:40:58.880 回答
0

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

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

它只是匹配[space]xxx,

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

于 2013-05-08T03:16:34.823 回答