快速學習正規表達式
學習正規表達式的最好方法是從例子開始,了解例子之後再自己對例子進行修改,實驗。好了,不多說廢話,開始學習吧! 首先給你推薦一款正規表達式測試器。免安裝版的,解壓後可以直接打開!
其實,從總的來說,我們平時經常用的就以下幾種:
?表示重複0次或1次
+表示重複1次或多次
{n} 重複n次
{n,} 重複n次或更多次
{n,m} 重複n到m次
.表示除了換行符以外的任意字元
*表示重複0零次或多次
.*連在一起就意味着任意數量的不包含換行的字元
\b比對單詞的開始或結束
\B比對不是單詞開頭或結束的位置
\d比對單個數字(0,或1,或2…或9)
\D比對任意非數字的字元
\s比對任意的空白符,包括空格,制表符(Tab),換行符,中文全角空格
\S比對任意不是空白符的字元
\w比對單個的單詞字元(能夠出現在一個單詞中的字元,包括字母或數字或下劃線或漢字)
\W比對任意不是字母,數字,下劃線,漢字的字元-連字元,在兩個字元之間建立範圍,如[A-Z]
^比對字元串的開始
$比對字元串的結束
^和$隻比對一個位置例如: 比對以String開始的行時表示為 ^String,比對以String結尾的行時表示為 String$,另外^$比對空行,^String$表示隻包含“String”字元串,^比對任意行。
\表示轉義,比如\"表示",\(表示(
[]表示範圍,比如[.?!]比對标點符号(.或?或!),[0-9]代表的含意與\d就是完全一緻的:表示1位數字;同理[a-z0-9A-Z_]也完全等同于\w(如果隻考慮英文的話)。
\b是正規表達式規定的一個特殊代碼(某些人叫它元字元,metacharacter),代表着單詞的開頭或結尾,也就是單詞的分界處,它隻比對一個位置。例如:I am Boby.你要找的是am後面不遠處跟着一個Boby,你應該用\bam\b.*\bBoby\b。如圖:
[
之前說過”.*“連在一起意味着任意數量的不包含換行的字元。現在\bam\b.*\bBoby\b的意思就很明顯了:先是一個單詞am,然後是任意個任意字元(但不能是換行),最後是Boby這個單詞。前邊的内容可以連續重複使用任意次以使整個表達式得到比對。
下面來舉幾個執行個體學習一下,來看一下大衆點評濟南,比如我要爬取首頁的16個一級分類,如圖
首先右擊頁面檢視頁面的源代碼,如圖
浏覽16個分類的href可知格式均為"/jinan/......",将頁面源代碼複制粘貼到測試器源文本處,根據16個分類的href附近标簽的相似性可以得出圖中的正規表達式<a class="name" href="(/jinan/\w+)" target="_blank" rel="external nofollow" date-name="\w+">,
其中()表示最終要提取出的内容,、w+表示重複一次或多次的字母。
其實正規表達式并不難懂,隻要你經過多次聯系,一定會掌握好它的!