2013-05-08 51 views
1

我想下面的文本匹配: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?

回答

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)。

0

這是因爲您沒有將正則表達式錨定到行首。所以在你後面兩種情況下:

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

它只是匹配[space]xxx,

嘗試^\(\s-+\)[^\s-]+,$(或,當爲的Emacs Lisp串寫:"^\\(\\s-+\\)[^\\s-]+,$"