版權(quán)聲明:可以任意轉(zhuǎn)載,,但轉(zhuǎn)載時必須標(biāo)明原作者charlee、原始鏈接http://tech./2008/07/08/vim-regexp/以及本聲明,。
毋庸多言,,在vim中正則表達(dá)式得到了十分廣泛的應(yīng)用。最常用的 / 和 :s 命令中,正則表達(dá)式都是不可或缺的,。下面對vim中的正則表達(dá)式的一些難點進(jìn)行說明,。 關(guān)于magicvim中有個magic的設(shè)定。設(shè)定方法為: :set magic " 設(shè)置magic :set nomagic " 取消magic :h magic " 查看幫助 vim畢竟是個編輯器,,正則表達(dá)式中包含的大量元字符如果原封不動地引用(像perl那樣),,勢必會給不懂正則表達(dá)式的人造成麻煩,比如 /foo(1) 命令,,大多數(shù)人都用它來查找foo(1)這個字符串,,但如果按照正則表達(dá)式來解釋,被查找的對象就成了 foo1 了,。 于是,,vim就規(guī)定,正則表達(dá)式的元字符必須用反斜杠進(jìn)行轉(zhuǎn)義才行,,如上面的例子,,如果確實要用正則表達(dá)式,就應(yīng)當(dāng)寫成 /foo\(1\) ,。但是,,像 . * 這種極其常用的元字符,都加上反斜杠就太麻煩了,。而且,,眾口難調(diào),有些人喜歡用正則表達(dá)式,,有些人不喜歡用…… 為了解決這個問題,,vim設(shè)置了 magic 這個東西。簡單地說,, magic就是設(shè)置哪些元字符要加反斜杠哪些不用加的,。簡單來說:
這個設(shè)置也可以在正則表達(dá)式中通過 \m \M 開關(guān)臨時切換,。 \m 后面的正則表達(dá)式會按照 magic 處理,\M 后面的正則表達(dá)式按照 nomagic 處理,,而忽略實際的magic設(shè)置,。 例如: /\m.* # 查找任意字符串 /\M.* # 查找字符串 .* (點號后面跟個星號) 另外還有更強(qiáng)大的 \v 和 \V。
例如: /\v(a.c){3}$ # 查找行尾的abcaccadc /\m(a.c){3}$ # 查找行尾的(abc){3} /\M(a.c){3}$ # 查找行尾的(a.c){3} /\V(a.c){3}$ # 查找任意位置的(a.c){3}$ 默認(rèn)設(shè)置是 magic,,vim也推薦大家都使用magic的設(shè)置,,在有特殊需要時,直接通過 \v\m\M\V 即可,。 本文下面使用的元字符都是 magic 模式下的,。 量詞vim的量詞與perl相比一點也不遜色,。
從上表中可見,,vim的忽略優(yōu)先量詞不像perl的 *? +? ?? 那樣,,而是統(tǒng)一使用 \{- 實現(xiàn)的,。這大概跟忽略優(yōu)先量詞不常用有關(guān)吧,。 環(huán)視和固化分組vim居然還支持環(huán)視和固化分組的功能,強(qiáng)大,,贊一個 關(guān)于環(huán)視的解釋請參考Yurii的《精通正則表達(dá)式》一書吧,。
和perl稍有不同的是,vim中的環(huán)視和固化分組的模式的位置與perl不同,。例如,,查找緊跟在 foo 之后的 bar,perl將模式寫在環(huán)視的括號內(nèi),,而vim將模式寫在環(huán)視的元字符之前,。 # Perl的寫法 /(?<=foo)bar/ # vim的寫法 /\(foo\)\@<=bar 參考vim的幫助文件非常有用,關(guān)于正則表達(dá)式可以參考以下的內(nèi)容,。 :h pattern :h magic :h perl-patterns
|
|