正規表示式入門

2021-05-28 09:02:15 字數 1176 閱讀 6637

老師說過:「正規表示式就是用字串讀取字串!」學習正規表示式的最好方法是從例子開始,理解例子之後再自己對例子進行修改,實驗。下面給出了不少簡單的例子,並對它們作了詳細的說明。

假設你在一篇英文**裡查詢hi,你可以使用正規表示式hi。

這幾乎是最簡單的正規表示式了,它可以精確匹配這樣的字串:由兩個字元組成,前乙個字元是h,後乙個是i。通常,處理正規表示式的工具會提供乙個忽略大小寫的選項,如果選中了這個選項,它可以匹配hi,hi,hi,hi這四種情況中的任意一種。

不幸的是,很多單詞裡包含hi這兩個連續的字元,比如him,history,high等等。用hi來查詢的話,這裡邊的hi也會被找出來。如果要精確地查詢hi這個單詞的話,我們應該使用\bhi\b。

\b是正規表示式規定的乙個特殊**(好吧,某些人叫它元字元,metacharacter),代表著單詞的開頭或結尾,也就是單詞的分界處。雖然通常英文的單詞是由空格,標點符號或者換行來分隔的,但是\b並不匹配這些單詞分隔字元中的任何乙個,它只匹配乙個位置

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

假如你要找的是hi後面不遠處跟著乙個lucy,你應該用\bhi\b.*\blucy\b。

這裡,.是另乙個元字元,匹配除了換行符以外的任意字元。*同樣是元字元,不過它代表的不是字元,也不是位置,而是數量——它指定*前邊的內容可以連續重複使用任意次以使整個表示式得到匹配。因此,.*連在一起就意味著任意數量的不包含換行的字元。現在\bhi\b.*\blucy\b的意思就很明顯了:先是乙個單詞hi,然後是任意個任意字元(但不能是換行),最後是lucy這個單詞。

換行符就是'\n',ascii編碼為10(十六進製制0x0a)的字元。

如果同時使用其它元字元,我們就能構造出功能更強大的正規表示式。比如下面這個例子:

0\d\d-\d\d\d\d\d\d\d\d匹配這樣的字串:以0開頭,然後是兩個數字,然後是乙個連字型大小「-」,最後是8個數字(也就是中國的**號碼。當然,這個例子只能匹配區號為3位的情形)。

這裡的\d是個新的元字元,匹配一位數字(0,或1,或2,或……)。-不是元字元,只匹配它本身——連字元(或者減號,或者中橫線,或者隨你怎麼稱呼它)。

為了避免那麼多煩人的重複,我們也可以這樣寫這個表示式:0\d-\d。 這裡\d後面的()的意思是前面\d

必須連續重複匹配2次(8次)。

正規表示式 正則入門

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

正規表示式入門

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

正規表示式入門

字串是程式設計時涉及到的最多的一種資料結構,對字串進行操作的需求幾乎無處不在。比如判斷乙個字串是否是合法的email位址,雖然可以程式設計提取 前後的子串,再分別判斷是否是單詞和網域名稱,但這樣做不但麻煩,而且 難以復用。正規表示式是一種用來匹配字串的強有力的 它的設計思想是用一種描述性的語言來給字...