[討論] 一個表示式的健檢

作者: m2251000 (akakaze 二兵 >)   2015-04-25 01:40:32
小弟我想要抓取一個具有固定class的div裡面所有的東西
而因為網頁不同,這個div標籤裡頭也有數量不一的其他的div標籤
為了避免截斷在錯誤的結尾標籤,我的想法是將裡面的div標籤都配對
也就是每碰到一個<div>就配給一個</div>,直到碰到對的那個
再經過各種亂湊(?)實驗之後
最成功的是下面這個
/<div class="c_1"[\s\S]+?>(?:(?:<div[\s\S]+?>[\s\S]+?<\/div>)*[\s\S]+?)+?<\/div>/
雖然實驗成功了,不過還是想請問一下
這樣的寫法會有什麼不好的bug嗎?
有什麼需要改進的地方呢?
或是有更簡潔的方式達到我的需求呢?
作者: mars90226 (火星人)   2015-04-25 02:02:00
/<div class="c_1"[^>]*>[^<]*(?:<div[^>]*>[^<]*<\/diiv>)*[^<]*<\/div>/你用了[\s\S]+?這樣雖然對,可是每比對一個字就會繼續往下看,要是實際上內容很長的話就會很慢但是你已經可以知道他會一直配對到某個字之前所以可以用[^<]*或是[^>]*來配對,這樣就會快
作者: othree (OOO)   2015-05-04 00:34:00
HTML 無法用 regexp 正確比對,用 SAX 可能比較快

Links booklink

Contact Us: admin [ a t ] ucptt.com