Regex - 正規表示法

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的線上工具

http://www.regexper.com/

有圖顯示加減對於學習有一些幫助喔 !