看板 RegExp 關於我們 聯絡資訊
小弟我想要抓取一個具有固定class的div裡面所有的東西 而因為網頁不同,這個div標籤裡頭也有數量不一的其他的div標籤 為了避免截斷在錯誤的結尾標籤,我的想法是將裡面的div標籤都配對 也就是每碰到一個<div>就配給一個</div>,直到碰到對的那個 再經過各種亂湊(?)實驗之後 最成功的是下面這個 /<div class="c_1"[\s\S]+?>(?:(?:<div[\s\S]+?>[\s\S]+?<\/div>)*[\s\S]+?)+?<\/div>/ 雖然實驗成功了,不過還是想請問一下 這樣的寫法會有什麼不好的bug嗎? 有什麼需要改進的地方呢? 或是有更簡潔的方式達到我的需求呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.33.36.91 ※ 文章網址: https://www.ptt.cc/bbs/RegExp/M.1429897240.A.948.html
mars90226: /<div class="c_1"[^>]*>[^<]*(?:<div[^>]*>[^<]*<\/di 04/25 02:02
mars90226: iv>)*[^<]*<\/div>/ 04/25 02:03
mars90226: 你用了[\s\S]+?這樣雖然對,可是每比對一個字就會繼續 04/25 02:03
mars90226: 往下看,要是實際上內容很長的話就會很慢 04/25 02:04
mars90226: 但是你已經可以知道他會一直配對到某個字之前 04/25 02:04
mars90226: 所以可以用[^<]*或是[^>]*來配對,這樣就會快 04/25 02:04
othree: HTML 無法用 regexp 正確比對,用 SAX 可能比較快 05/04 00:34