2009-06-29 90 views
6

如果我想要所有帶有'ruby'文本但不是'myruby'的文本,那麼這就是我要做的。vim的正則表達式解釋

:g/\<ruby\>/ 

我的問題是小於和大於符號在這裏的含義是什麼?我使用的唯一正則表達式是在用Ruby進行編程時。

同樣的,如果我想找到三個連續的空行,那麼這是我會做什麼

/^\n\{3} 

我的問題是,爲什麼我逃避第一個花括號(大括號),而不是逃避第二捲曲大括號(關閉大括號)?

回答

13

\<\>平均字邊界。在Perl中,grep和更少(爲了命名3 OTOH),您使用\b,所以我想它在Ruby中是一樣的。

關於你提到的第二個問題,是需要整個表達式{3}逃逸。你不是逃避每個花括號,而是整個事情在一起。

更多見this question

0

爲了您的第一個正規表達式,你也可以這樣做:

:g/[^\ ]ruby\/

這將確保有一個空間之前,你的紅寶石關鍵字之後。

+3

但這不符合在行的開始或結束處的`ruby`。 – 2009-06-29 13:23:11

+0

@Nathan好點... – samoz 2009-06-29 13:24:37

16

Vim在正則表達式中用於反斜槓轉義的規則不一致。你要逃離的\{...}左括號,但[...]不需要逃避可言,並且捕獲組是\(...\)(避讓開,關括號)。還有其他不一致之處。

值得慶幸的Vim讓你改變這種行爲,即使是正則表達式,通過正則表達式的基礎上,通過magic設置。如果將\v置於正則表達式的開頭,轉義規則會變得更加一致;除數字,字母和下劃線之外,所有內容都是「神奇」的,所以除非你想插入除這些之外的文字字符,否則不需要反斜槓。

你的第一個例子就變成:g/\v<ruby>/和你的第二個例子變得/\v^\n{3}。有關更多信息,請參閱:h /magic:h /\v