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

看板RegExp (正規表示式 Regular Expression)作者 (akakaze 二兵 >)時間9年前 (2015/04/25 01:40), 編輯推噓2(205)
留言7則, 2人參與, 最新討論串1/1
小弟我想要抓取一個具有固定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

04/25 02:02, , 1F
/<div class="c_1"[^>]*>[^<]*(?:<div[^>]*>[^<]*<\/di
04/25 02:02, 1F

04/25 02:03, , 2F
iv>)*[^<]*<\/div>/
04/25 02:03, 2F

04/25 02:03, , 3F
你用了[\s\S]+?這樣雖然對,可是每比對一個字就會繼續
04/25 02:03, 3F

04/25 02:04, , 4F
往下看,要是實際上內容很長的話就會很慢
04/25 02:04, 4F

04/25 02:04, , 5F
但是你已經可以知道他會一直配對到某個字之前
04/25 02:04, 5F

04/25 02:04, , 6F
所以可以用[^<]*或是[^>]*來配對,這樣就會快
04/25 02:04, 6F

05/04 00:34, , 7F
HTML 無法用 regexp 正確比對,用 SAX 可能比較快
05/04 00:34, 7F
文章代碼(AID): #1LEe0Ob8 (RegExp)
文章代碼(AID): #1LEe0Ob8 (RegExp)