作者m2251000 (akakaze 二兵 >)
看板RegExp
标题[讨论] 一个表示式的健检
时间Sat Apr 25 01:40:32 2015
小弟我想要抓取一个具有固定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://webptt.com/cn.aspx?n=bbs/RegExp/M.1429897240.A.948.html
1F:推 mars90226: /<div class="c_1"[^>]*>[^<]*(?:<div[^>]*>[^<]*<\/di 04/25 02:02
2F:→ mars90226: iv>)*[^<]*<\/div>/ 04/25 02:03
3F:→ mars90226: 你用了[\s\S]+?这样虽然对,可是每比对一个字就会继续 04/25 02:03
4F:→ mars90226: 往下看,要是实际上内容很长的话就会很慢 04/25 02:04
5F:→ mars90226: 但是你已经可以知道他会一直配对到某个字之前 04/25 02:04
6F:→ mars90226: 所以可以用[^<]*或是[^>]*来配对,这样就会快 04/25 02:04
7F:推 othree: HTML 无法用 regexp 正确比对,用 SAX 可能比较快 05/04 00:34