我试图匹配以下文字:
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匹配,即使我已指定'没有空格'?
答案 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-]+,$"
)