有一天,老板對小明說,去咱們網(wǎng)站xxx行業(yè)找100個公司,打電話調(diào)研下他們對網(wǎng)站的反饋評價,分析下用戶需求。
小明找到技術(shù)希望幫忙導(dǎo)出用戶電話數(shù)據(jù)。可技術(shù)大哥正在趕一個重要項目,對小明的要求很不耐煩:“分類列表不都是用戶電話嗎?100個又不多,自己弄!”
小明打開了某個列表,一個個復(fù)制粘貼電話到Excel表格,花了20分鐘時間做這種機械工作。

可如果小明懂正則表達式的話,這個工作只需要1分鐘。

瀏覽器右鍵查看網(wǎng)頁源代碼,把代碼粘貼到支持正則表達式的編輯器中(Editplus、Sublime等,是個編程工具都支持)
打開查找功能,輸入正則表達式 1d{10},如上圖所示,然后點擊查找全部按鈕,一下所有電話號碼就被選中了,復(fù)制粘貼電話到另一個新建文件中,搞定。

什么是正則表達式?
在編寫處理字符串的程序或網(wǎng)頁時,經(jīng)常會有查找符合某些復(fù)雜規(guī)則的字符串的需要。正則表達式就是用于描述這些規(guī)則的工具。
很可能你使用過Windows下用于文件查找的通配符,也就是*和?,如果你想查找某個目錄下的所有的Word文檔的話,你會搜索*.doc。在這里,*會被解釋成任意的字符串。
正則表達式提供很多符號來匹配不同的字符串,比如比如s匹配任意的空白符,包括空格,制表符(Tab),換行符,中文全角空格等。w匹配字母或數(shù)字或下劃線或漢字,^匹配字符串的開始,$匹配字符串的結(jié)束。
有了這些符號搭配,就可以寫出復(fù)雜的字符串匹配規(guī)則,迅速找到需要的內(nèi)容。
那剛才輸入的1d{10}是個什么鬼東西?
大家都知道我國手機號都是11位,而且開頭一定是1對吧,d在正則表達式里表示匹配數(shù)字(從0到9),而{10}代表的意思是一共10個數(shù)字,這樣1d{10}匹配出來的就是手機號碼了。
互聯(lián)網(wǎng)產(chǎn)品中哪里會用到正則表達式呢?
前端數(shù)據(jù)校驗
最簡單的就是登錄注冊的校驗部分。
用戶輸入的用戶名符合規(guī)范嗎?用戶輸入的是郵箱地址嗎?
以郵箱為例子,正則表達式如下:
w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
通過這個正則表達式就可以判斷用戶輸入的是否是郵件地址。
還有很多很多的前端校驗工作都用正則表達式實現(xiàn),比如判斷用戶的QQ號輸入(至少像QQ號):
[1-9]d{4,}
從這個表達式看,QQ號開頭是1-9數(shù)字中的一個(沒見過0開頭的QQ號吧),后面的d{4,}表達意思的是最少加上4個數(shù)字,這樣的結(jié)構(gòu)才像一個QQ號。(QQ號最短5位)
還有更多的例子,常用正則表達式如下:

采集爬取
大數(shù)據(jù)這些年非?;?,但如果你沒有有足夠多的數(shù)據(jù)怎么辦?
采集爬取技術(shù)差不多是一個程序員的必備技能,而采集爬取什么內(nèi)容,差不多都會用到正則表達式。
用來匹配頁面里需要的數(shù)據(jù)和字段,格式化以后放到自己的數(shù)據(jù)庫中。
比如墨跡天氣的數(shù)據(jù)就是采集了不同的數(shù)據(jù)源,并通過機器學(xué)習(xí)的方法進行智能校準(zhǔn)。
新網(wǎng)站沒內(nèi)容怎么辦?采集內(nèi)容。
網(wǎng)站流量上不去怎么辦?采集內(nèi)容偽原創(chuàng)。
采集爬取其實有很多有趣的玩法,參見:能利用爬蟲技術(shù)做到哪些很酷很有趣很有用的事情?
而采集爬取網(wǎng)頁基本離不開正則表達式。
聽起來很牛逼,那怎么學(xué)呢?
推薦先讀這篇:30分鐘學(xué)會正則表達式
實踐是最好的老師,為了提升學(xué)習(xí)效率,建議下載安裝專業(yè)的正則表達式測試器。

Mac可以下載安裝yRegex。
然后把常用的正則表達式都測試驗證一遍,然后試著自己去寫,然后對比差異。
其他學(xué)習(xí)資源
正則表達式學(xué)習(xí)書籍推薦兩本《精通正則表達式》、《正則表達式必知必會》


國外的優(yōu)秀在線正則表達式測試器:
http://www.regexr.com/
https://regexper.com/
關(guān)于正則表達式的專題網(wǎng)站:
http://Regular-Expressions.info