我學正則表達式(1)

在做了一些文字處理工作後,覺得正則表達式真的是有通天的神力,熟練掌握後,頓覺手握倚天劍,心有九陽真經,腳踏風火輪,可以肆意地在文字的叢林裏披荊斬棘。下面,我們就來看看基本的正則表達式的用法。

基本的正則表達式

剛剛碰到正則表達式的時候,我碰到了一個小任務,就是抽取上海公司網頁中的電話號碼,比如021-34206500
我翻了翻書,瞭解了[]和-的用法後,高興地用了這麼一個正則表達式[0-9]+-[0-9]+ 完成了任務 ,其中[0-9]表示[0-9]中任選一個匹配,+表示後面可以重複1到N次,N代表無限。
不料,大神級別的項目組長看了這個表達式之後,說了句,“你是新手吧?”。靠,我真的很納悶,他怎麼看出來的?
最後,看了一些帖子,才發現,有人說過,菜鳥採用[0-9],大神都用\d,其中d是英語digit(數字)的第一個字母。
懂了以後,我把上面的表達式改成了 \d+-\d+,也能用。

不過,程序運行了幾次後,又碰到了一個新問題,有的公司號碼是這樣的(021)34206500,有的還用了中文括號021)34206500,這可怎麼辦,三種情況了?
      我突然想起,貌似有個點號可以匹配全部,試了下\d+.\d+,果真又搞定了
過了段時間,項目組長把我叫了過去,說抽取的號碼有問題,有的位數多了,有的位數少了,比如有的公司竟然寫了個4位數的號碼,(021)4588.
問題來了,怎麼把這些排除掉呢,我靈機一動,發現太簡單了,直接寫成\d\d\d.\d\d\d\d\d\d\d\d。寫完以後,我覺得這他媽的真的長的,設計正則的人真的腦殘,不能搞點簡便的辦法嗎?
話說我纔剛想噴這麼一句,有人從後面拍了下我肩膀,說,“你怎麼這麼寫?讓我來給你SHOW一個大招。”。說罷,他一改,\d{3}.\d{8}。
“短了那麼多,能行嗎?”
“試試“
一試,還真的可以。原來可以用{}裏面加個數字來表示重複次數。又學一招。

小結

在本文中,我們學習了下列內容:
+, 匹配1到N次重複
[0-9], 匹配數字
\d,用字符表示數字
{N}, 重複N次
(未完待續)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章