中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

正則表達(dá)式入門(mén)

2018-07-20    來(lái)源:編程學(xué)習(xí)網(wǎng)

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

cjx最近在做爬蟲(chóng)的項(xiàng)目,急切需要在頁(yè)面中抓取自己想要的內(nèi)容,但是通過(guò)邏輯判斷獲取實(shí)在是過(guò)于復(fù)雜。很慶幸有正則表達(dá)式這個(gè)利器,很多事情都能夠輕松辦到,cjx之前也有了解一些關(guān)于正則表達(dá)式的知識(shí)。不過(guò)一直處于理解不徹底的狀態(tài),很難有效的自己編寫(xiě)一個(gè)滿意的正則表達(dá)式出來(lái)。最近在網(wǎng)上發(fā)現(xiàn)有本Jeffrey E.F.Fried寫(xiě)的 精通正則表達(dá)式。 看了第一章后突然發(fā)現(xiàn)自己能寫(xiě)幾個(gè)正則了,呵呵~~~ cjx突然有一種從屌絲升級(jí)成高富帥的感腳...下面對(duì)書(shū)上的第一章做了下總結(jié)~

行的起始和結(jié)束

或許最容易理解的元字符就是脫字符號(hào)^和美元符號(hào)$了,在檢查一行文本時(shí),^代表一行的開(kāi)始,$代表結(jié)束。

讀者最好養(yǎng)成按照字符來(lái)理解正則表達(dá)式的習(xí)慣。 例如,不要這樣:

  ^cat 匹配以cat開(kāi)頭的行

而應(yīng)該這樣理解:

  ^cat 匹配的是以c作為一行的第一個(gè)字符,緊接一個(gè)a,緊接一個(gè)t的文本。

這兩種理解的結(jié)果并無(wú)差異,但按照字符來(lái)解讀更易于明白新遇到的正則表達(dá)式的內(nèi)部邏輯。

 

匹配若干字符之一

如果我們需要搜索的是單詞"grey",同時(shí)又不確定它是否寫(xiě)作"gray",就可以使用正則表達(dá)式結(jié)構(gòu)體[...]。它容許使用者列出在某處期望的匹配的字符,通常被稱(chēng)作字符組。

所以,gr[ea]y的意思是:先找到g,跟著的是一個(gè)r,然后是一個(gè)a或者e,最后是一個(gè)y。

在字符組內(nèi)部,字符租元字符 '-' 表示一個(gè)范圍: <H[1-6]> 與 <H[123456]> 是完全一樣的。我們還可以隨心所欲地把字符范圍與普通文本結(jié)合起來(lái):

[0-9A-Z_!.?] 能夠匹配一個(gè)數(shù)字、大寫(xiě)字母、下劃線、驚態(tài)號(hào)、點(diǎn)號(hào)或者是問(wèn)號(hào)。

 

排除型字符組

用[^...] 來(lái)取代 [...] 這個(gè)字符組就會(huì)匹配任何未列出的字符。例如:[^1-6] 匹配了除了1到6以外的任何字符。這個(gè)組中開(kāi)頭的^表示排除,所以這里列出的不是希望匹配的字符,而是不希望匹配的字符。

 

用點(diǎn)號(hào)匹配任意字符

元字符. 是用來(lái)匹配任意字符的字符組的簡(jiǎn)便寫(xiě)法。如果我們需要在表達(dá)式中使用一個(gè)"匹配任何字符" 的占位符,用點(diǎn)號(hào)就很方便。


匹配任意子表達(dá)式

元字符 | 是一個(gè)非常簡(jiǎn)潔的元字符,它的意思就"或" 。依靠它,我們能夠把不同的子表達(dá)式組合一個(gè)總的表達(dá)式,而這個(gè)總的表達(dá)式又能夠匹配任意的子表達(dá)式。

可選項(xiàng)元素

現(xiàn)在來(lái)看color和colour的匹配。它們的區(qū)別在于,后面的單詞比前面的多一個(gè)u,我們可以用coloru?r 來(lái)解決這個(gè)問(wèn)題。元字符? (也就是問(wèn)號(hào))代表可選項(xiàng)。把它加在一個(gè)字符的后面,就表示此處容許出現(xiàn)這個(gè)字符,不過(guò)它的出現(xiàn)并非匹配成功的必要條件。

其他量詞:重復(fù)出現(xiàn)

+(加號(hào))和*(星號(hào))的作用與問(wèn)號(hào)類(lèi)似。元字符+ 表示之前緊鄰的元素出現(xiàn)一次或多次,而* 表示之前緊鄰的元素出現(xiàn)任意多次,或者不出現(xiàn)。
接下來(lái)看類(lèi)似 <HR SIZE=14> 這樣的TAG,它表示一條高度為14的水平線。此外HR 與SIZE 之間必須有一個(gè)空格,而等號(hào)兩邊可以沒(méi)有空格。于是若要找到網(wǎng)頁(yè)中這樣的HR,表達(dá)式既被寫(xiě)成 <HR +SIZE *= *14 *>,有的時(shí)候HR的SIZE值往往是可變的,還有有可能不存在SIZE屬性。那么表達(dá)式又可以被改寫(xiě)成<HR( +SIZE *= *[0-9]+)? *>。哇哦,真是太神奇了。

括號(hào)及反向引用

到目前為止,我們已經(jīng)見(jiàn)過(guò)括號(hào)的兩種用途:1.限制多選項(xiàng)的范圍;2.將若干字符組合為一個(gè)單元,受問(wèn)號(hào)或星號(hào)之類(lèi)量詞作用,F(xiàn)在我要介紹括號(hào)的另外一種用途即反向引用,雖然它在egrep中并不常見(jiàn)(不過(guò)流行的GNU版本確實(shí)支持這一功能),但在其他工具軟件中很常見(jiàn)。
在支持反向引用的工具軟件中,括號(hào)能夠"記憶"其中的子表達(dá)式匹配的文本,不論這些文本是什么,元字符序列\(zhòng)1 都能夠記住它們。

當(dāng)然,在一個(gè)表達(dá)式中我們可以使用多個(gè)括號(hào)。再用\1、\2、\3等來(lái)表示第一、第二、第三組括號(hào)匹配的文本。括號(hào)是按照開(kāi)括號(hào)'(' 從左到右的出現(xiàn)順序來(lái)進(jìn)行的,所以 ([a-z])([0-9])\1\2 中的\1代表[a-z] 匹配的內(nèi)容,而\2 代表[0-9]匹配的內(nèi)容。

神奇的轉(zhuǎn)義
就是有的時(shí)候,我們可能需要匹配一些.+*?等符號(hào),但是同時(shí)發(fā)現(xiàn)他們又是元符號(hào)。于是我們可以在它們的前面加上一個(gè)\ 轉(zhuǎn)義符來(lái)實(shí)現(xiàn)這些特殊元符號(hào)的匹配。比如匹配某互聯(lián)網(wǎng)的主機(jī)名ega.att.com,既可以寫(xiě)成ega\.att\.com。

 
一些有用的簡(jiǎn)記
\t    制表符
\n   換行符
\r    回車(chē)符
\s   任何空白字符,如空格、換行、tab縮進(jìn)等所有的空白符
\S   除\s 之外的任何字符
\w  [a-zA-Z0-9] 在\w+ 中非常有用,可以用來(lái)匹配一個(gè)單詞
\W  除\w 之外的任何字符 
\d   [0-9],即數(shù)字
\D   除\d 外的任何字符,即[^0-9]

標(biāo)簽: 互聯(lián)網(wǎng) 搜索

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:C++中的指針與引用詳細(xì)解讀

下一篇:高級(jí)Java程序員值得擁有的10本書(shū)