使用preg_match_all()清除大量文本的模式

时间:2014-01-02 18:09:11

标签: php regex

我搜索了很多关于清除我从链接中抓取的div的模式。

我使用了这段代码:

foreach ( $html->find('.layout-post-left') as $element ) {

} 

获取div,但div非常长并且有很多数据。 我需要抓取的只是来自此div的两个链接,它们不在JavaScript标记内的href标记之间。

有人可以给我一个模式,让它与preg_match_all()一起使用来清除所有混乱并保留http地址

1 个答案:

答案 0 :(得分:0)

如果没有其他链接,并且链接是绝对的并且HTTP(即,它们以http://开头)它们在JS字符串中,那么您只需要的是:

$out_array = [];
preg_match_all( "#(['\"])(http://.*?)\\1#", $element_content_string, $out_array );
var_dump($out_array);

第一个链接位于$out_array[2][0],第二个链接位于$out_array[2][1]

假设$ element_content_string类似于:

$element_content_string = "<script>
  var foo = 'http://foo.bar/bax?cz';
  var bar = \"http://bax:30\";
</script>";

编辑:从你的例子来看,我对以http开头的链接的假设不适用。因此:

preg_match_all( "#\"file\":\\s*(['\"])(http://.*?)\\1#", $element_content_string, $out_array );