入門

2018-08-12 22:03 更新

入門

學(xué)習(xí)正則表達(dá)式的最好方法是從例子開始,理解例子之后再自己對(duì)例子進(jìn)行修改,實(shí)驗(yàn)。下面給出了不少簡(jiǎn)單的例子,并對(duì)它們作了詳細(xì)的說明。

假設(shè)你在一篇英文小說里查找 hi,你可以使用正則表達(dá)式 hi。

這幾乎是最簡(jiǎn)單的正則表達(dá)式了,它可以精確匹配這樣的字符串:由兩個(gè)字符組成,前一個(gè)字符是h,后一個(gè)是 i。通常,處理正則表達(dá)式的工具會(huì)提供一個(gè)忽略大小寫的選項(xiàng),如果選中了這個(gè)選項(xiàng),它可以匹配 hi,HI,Hi,hI 這四種情況中的任意一種。

不幸的是,很多單詞里包含 hi 這兩個(gè)連續(xù)的字符,比如 him,history,high 等等。用 hi 來查找的話,這里邊的hi也會(huì)被找出來。如果要精確地查找 hi 這個(gè)單詞的話,我們應(yīng)該使用 \bhi\b。

\b 是正則表達(dá)式規(guī)定的一個(gè)特殊代碼(好吧,某些人叫它元字符,metacharacter),代表著單詞的開頭或結(jié)尾,也就是單詞的分界處。雖然通常英文的單詞是由空格,標(biāo)點(diǎn)符號(hào)或者換行來分隔的,但是 \b 并不匹配這些單詞分隔字符中的任何一個(gè),它只匹配一個(gè)位置。

假如你要找的是 hi 后面不遠(yuǎn)處跟著一個(gè) Lucy,你應(yīng)該用 \bhi\b.*\bLucy\b。

這里,.是另一個(gè)元字符,匹配除了換行符以外的任意字符。*同樣是元字符,不過它代表的不是字符,也不是位置,而是數(shù)量——它指定*前邊的內(nèi)容可以連續(xù)重復(fù)使用任意次以使整個(gè)表達(dá)式得到匹配。因此,.*連在一起就意味著任意數(shù)量的不包含換行的字符。現(xiàn)在 \bhi\b.*\bLucy\b 的意思就很明顯了:先是一個(gè)單詞 hi,然后是任意個(gè)任意字符(但不能是換行),最后是 Lucy 這個(gè)單詞。

如果需要更精確的說法,\b 匹配這樣的位置:它的前一個(gè)字符和后一個(gè)字符不全是(一個(gè)是,一個(gè)不是或不存在)\w。

如果同時(shí)使用其它元字符,我們就能構(gòu)造出功能更強(qiáng)大的正則表達(dá)式。比如下面這個(gè)例子:

0\d\d-\d\d\d\d\d\d\d\d 匹配這樣的字符串:以 0 開頭,然后是兩個(gè)數(shù)字,然后是一個(gè)連字號(hào)“-”,最后是 8 個(gè)數(shù)字(也就是中國的電話號(hào)碼。當(dāng)然,這個(gè)例子只能匹配區(qū)號(hào)為 3 位的情形)。

換行符就是'\n',ASCII 編碼為 10(十六進(jìn)制 0x0A)的字符。

這里的\d 是個(gè)新的元字符,匹配一位數(shù)字(0,或 1,或 2,或……)。-不是元字符,只匹配它本身——連字符(或者減號(hào),或者中橫線,或者隨你怎么稱呼它)。

為了避免那么多煩人的重復(fù),我們也可以這樣寫這個(gè)表達(dá)式:0\d{2}-\d{8}。這里\d 后面的{2}({8})的意思是前面\d 必須連續(xù)重復(fù)匹配 2 次(8 次)。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)