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