Regex、正規表示法
這篇文章應該是擠了三年才出來(誇張),會這樣說,是因為這個東西在我的每年的計畫目標都出現
(代表每年都沒有達成 =.=) 如此就可知道Regex是多麼的惱人的學習,
至少對我來說學習曲線有點高度,看著一些火星文,內心都會冒出OS:ㄊㄋㄋㄉ
最後都會逃避,然後選擇土法煉鋼的方式拆解出我要的字串,就在近期才強迫自己學習,
一開始是先在網路上搜尋資源,找到一個 "模擬器" Expresso 3.0
然後在在保哥的網站上找到一篇推薦的入門文章,一切就緒後就可以開始
http://www.dotblogs.com.tw/johnny/archive/2010/01/25/13301.aspx
看了一天也是一知半解(還我八小時來),也不知道會不會,就直接在模擬器上模擬,比較容易了解
如下
如上圖,我想要解析一個網頁,要抓取的是<table> ~ </table>之間的資料,
直覺上來說,我們的想法很就是希望抓取<table>開頭,</table>結尾
因此
1.這段Pattern的 (<table>[\S\r\n]{0,})+</table> 黃色部分大家應該都是沒問題
2.接下來要解析[\S\r\n] 請參考入門網址,
[] 內的代表符合條件的"參數"。
\S代表空白以外的字元。(參數一)
\r\n代表換行字元。(參數二)
因此這段我們可以說 "符合空白以外 且 符合換行" 的資料
3.{0,} 的解釋就是符合2.的條件次數(這有點難解釋),入門網址的講解太攏統,
後面我會舉個簡單例子補充說明這段。
目前的表示 :符合 "<table>"開頭(1.)後面接著符合 "空白以外 或 換行" 的字元 (2.) ,且重複了 0次以上 (3.)
4.+是看都看不懂,直接操練上才了解,就是在+之前的字元出現一次或一次以上的都算是符合的條件
5.最後再補個 </table>做結尾就是我要抓到的資料的(圖右下角 Search Result)。
結論:其實小馬自己在網路上也是看了很多資料,但是可能資質駑鈍,總覺得在網路上的說明就
像是 "若且唯若" 這種很討人厭的學術用語 (就不能用白話文說明嗎 ? (╯-_-)╯ ~╩╩ )
花了很多時間,最後還不如找個範例自己實做了解的快。
補充說明:剛才{0,}的解釋,用個簡單的範例畫面說明客官比較容易了解
下篇會將此結果實際應用在.Net 範例上。
Bascally, Regex is really difficult to explain for me. The best way is find a sample to try it.
補充:一個朋友分享了一不錯解析Regex的線上工具
有圖顯示加減對於學習有一些幫助喔 !