久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Vi中的正則表達(dá)式 - idv2

 weicat 2010-07-27

毋庸多言,,在vim中正則表達(dá)式得到了十分廣泛的應(yīng)用。最常用的 / 和 :s 命令中,正則表達(dá)式都是不可或缺的,。下面對vim中的正則表達(dá)式的一些難點進(jìn)行說明,。

關(guān)于magic

vim中有個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è)置哪些元字符要加反斜杠哪些不用加的,。簡單來說:

  • magic(\m):除了 $ . * ^ 之外其他元字符都要加反斜杠。
  • nomagic(\M):除了 $ ^ 之外其他元字符都要加反斜杠,。

這個設(shè)置也可以在正則表達(dá)式中通過 \m \M 開關(guān)臨時切換,。 \m 后面的正則表達(dá)式會按照 magic 處理,\M 后面的正則表達(dá)式按照 nomagic 處理,,而忽略實際的magic設(shè)置,。

例如:

/\m.*          # 查找任意字符串
/\M.*          # 查找字符串 .* (點號后面跟個星號)

另外還有更強(qiáng)大的 \v 和 \V。

  • \v(即 very magic 之意):任何元字符都不用加反斜杠
  • \V(即 very nomagic 之意):任何元字符都必須加反斜杠

例如:

/\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 Perl 意義
* * 0個或多個(匹配優(yōu)先)
\+ + 1個或多個(匹配優(yōu)先)
\? 或 \= ? 0個或1個(匹配優(yōu)先),\?不能在 ? 命令(逆向查找)中使用
\{n,m} {n,m} n個到m個(匹配優(yōu)先)
\{n,} {n,} 最少n個(匹配優(yōu)先)
\{,m} {,m} 最多m個(匹配優(yōu)先)
\{n} {n} 恰好n個
\{-n,m} {n,m}? n個到m個(忽略優(yōu)先)
\{-} *? 0個或多個(忽略優(yōu)先)
\{-1,} +? 1個或多個(忽略優(yōu)先)
\{-,1} ?? 0個或1個(忽略優(yōu)先)

從上表中可見,,vim的忽略優(yōu)先量詞不像perl的 *? +? ?? 那樣,,而是統(tǒng)一使用 \{- 實現(xiàn)的,。這大概跟忽略優(yōu)先量詞不常用有關(guān)吧,。

環(huán)視和固化分組

vim居然還支持環(huán)視和固化分組的功能,強(qiáng)大,,贊一個 :D 關(guān)于環(huán)視的解釋請參考Yurii的《精通正則表達(dá)式》一書吧,。

vim Perl 意義
\@= (?= 順序環(huán)視
\@! (?! 順序否定環(huán)視
\@<= (?<= 逆序環(huán)視
\@<! (?<! 逆序否定環(huán)視
\@> (?> 固化分組
\%(atom\) (?: 非捕獲型括號

和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

 


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多