[讨论] 一个表示式的健检

楼主: 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