正規表示式入門

2022-03-20 04:57:48 字數 2227 閱讀 4509

cjx最近在做爬蟲的專案,急切需要在頁面中抓取自己想要的內容,但是通過邏輯判斷獲取實在是過於複雜。很慶幸有正規表示式這個利器,很多事情都能夠輕鬆辦到,cjx之前也有了解一些關於正規表示式的知識。不過一直處於理解不徹底的狀態,很難有效的自己編寫乙個滿意的正規表示式出來。最近在網上發現有本jeffrey e.f.fried寫的精通正規表示式。 看了第一章後突然發現自己能寫幾個正則了,呵呵~~~ cjx突然有一種從屌絲公升級成高富帥的感腳...下面對書上的第一章做了下總結~

行的起始和結束

或許最容易理解的元字元就是脫字符號^和美元符號$了,在檢查一行文字時,^代表一行的開始,$代表結束。

讀者最好養成按照字元來理解正規表示式的習慣。 例如,不要這樣:

^cat 匹配以cat開頭的行

而應該這樣理解:

^cat 匹配的是以c作為一行的第乙個字元,緊接乙個a,緊接乙個t的文字。

這兩種理解的結果並無差異,但按照字元來解讀更易於明白新遇到的正規表示式的內部邏輯。

匹配若干字元之一

如果我們需要搜尋的是單詞"grey",同時又不確定它是否寫作"gray",就可以使用正規表示式結構體[...]。它容許使用者列出在某處期望的匹配的字元,通常被稱作字元組。

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

在字元組內部,字元租元字元 '-' 表示乙個範圍: 與 是完全一樣的。我們還可以隨心所欲地把字元範圍與普通文字結合起來:

[0-9a-z_!.?] 能夠匹配乙個數字、大寫字母、下劃線、驚態號、點號或者是問號。

排除型字元組

用[^...] 來取代 [...] 這個字元組就會匹配任何未列出的字元。例如:[^1-6] 匹配了除了1到6以外的任何字元。這個組中開頭的^表示排除,所以這裡列出的不是希望匹配的字元,而是不希望匹配的字元。

用點號匹配任意字元

元字元. 是用來匹配任意字元的字元組的簡便寫法。如果我們需要在表示式中使用乙個"匹配任何字元" 的佔位符,用點號就很方便。

匹配任意子表示式

元字元 | 是乙個非常簡潔的元字元,它的意思就"或" 。依靠它,我們能夠把不同的子表示式組合乙個總的表示式,而這個總的表示式又能夠匹配任意的子表示式。

可選項元素

現在來看color和colour的匹配。它們的區別在於,後面的單詞比前面的多乙個u,我們可以用coloru?r 來解決這個問題。元字元? (也就是問號)代表可選項。把它加在乙個字元的後面,就表示此處容許出現這個字元,不過它的出現並非匹配成功的必要條件。

其他量詞:重複出現

+(加號)和*(星號)的作用與問號類似。元字元+ 表示之前緊鄰的元素出現一次或多次,而* 表示之前緊鄰的元素出現任意多次,或者不出現。

接下來看類似 這樣的tag,它表示一條高度為14的水平線。此外hr 與size 之間必須有乙個空格,而等號兩邊可以沒有空格。於是若要找到網頁中這樣的hr,表示式既被寫成 ,有的時候hr的size值往往是可變的,還有有可能不存在size屬性。那麼表示式又可以被改寫成。哇哦,真是太神奇了。

括號及反向引用

到目前為止,我們已經見過括號的兩種用途:1.限制多選項的範圍;2.將若干字元組合為乙個單元,受問號或星號之類量詞作用。現在我要介紹括號的另外一種用途即反向引用,雖然它在egrep中並不常見(不過流行的gnu版本確實支援這一功能),但在其他工具軟體中很常見。

在支援反向引用的工具軟體中,括號能夠"記憶"其中的子表示式匹配的文字,不論這些文字是什麼,元字串行\1 都能夠記住它們。

當然,在乙個表示式中我們可以使用多個括號。再用\1、\2、\3等來表示第

一、第二、第三組括號匹配的文字。括號是按照開括號'(' 從左到右的出現順序來進行的,所以 ([a-z])([0-9])\1\2 中的\1代表[a-z] 匹配的內容,而\2 代表[0-9]匹配的內容。

神奇的轉義

就是有的時候,我們可能需要匹配一些.+*?等符號,但是同時發現他們又是元符號。於是我們可以在它們的前面加上乙個\ 轉義符來實現這些特殊元符號的匹配。比如匹配某網際網路的主機名ega.att.com,既可以寫成ega\.att\.com。

一些有用的簡記

\t    製表符

\n   換行符

\r    回車符

\s   任何空白字元,如空格、換行、tab縮排等所有的空白符

\s   除\s 之外的任何字元

\w  [a-za-z0-9] 在\w+ 中非常有用,可以用來匹配乙個單詞

\w  除\w 之外的任何字元 

\d   [0-9],即數字

\d   除\d 外的任何字元,即[^0-9]

正規表示式 正則入門

先從乙個例子開始正規表示式。書寫乙個匹配手機號的正規表示式,為了方便討論,假定手機號是1開頭,第二位只能是3 5 8中的其中乙個,總共11位的數字,形如13 匹配手機號的正規表示式為 1 358 d 下面介紹此正規表示式中的各個符號的含義。表示字串的開頭,後面緊接著1,表示匹配的字串要以 1 開頭。...

正規表示式入門

對於文字字元,有11個字元被保留作特殊用途。他們是 這些特殊字元也被稱作元字元 不可顯示字元 可以使用特殊字串行來代表某些不可顯示字元 代表tab 0x09 代表回車符 0x0d 代表換行符 0x0a 字符集 字符集是由一對方括號 括起來的字元集合。使用字符集,你可以告訴正規表示式引擎僅僅匹配多個字...

正規表示式入門

老師說過 正規表示式就是用字串讀取字串!學習正規表示式的最好方法是從例子開始,理解例子之後再自己對例子進行修改,實驗。下面給出了不少簡單的例子,並對它們作了詳細的說明。假設你在一篇英文 裡查詢hi,你可以使用正規表示式hi。這幾乎是最簡單的正規表示式了,它可以精確匹配這樣的字串 由兩個字元組成,前乙...