日期:2014-05-17  浏览次数:20510 次

PHP抓取页面后正则截取值,只要中间的值
页面取得如下值 

<dt>深圳市ABC电子有限公司</dt>
 <dd><span>联系人:</span>张先生</dd>
<dd style="color: rgb(68, 153, 0);"><span>网址:</span><span class="website">Http://www.ABCDE.com</span></dd>
<dd><span>传真:</span></dd>
<dd><span>电话:</span>0755-888888888</dd>
<dd><span>邮箱:</span>sales@ABCDE.com</dd>
<dd><span>地址:</span>深圳市福田区上步南路ABCDE大厦R座9D</dd>

怎样用最简短的正则取得公司名、联系人、传真、电话、邮箱、地址等变量信息呢?基本上也就是分别取出<dt></dt>,<dd></dd>等中间的值。

------解决方案--------------------
PHP code
 $str=<<<html
<dt>深圳市ABC电子有限公司</dt>
 <dd><span>联系人:</span>张先生</dd>
<dd style="color: rgb(68, 153, 0);"><span>网址:</span><span class="website">Http://www.ABCDE.com</span></dd>
<dd><span>传真:</span></dd>
<dd><span>电话:</span>0755-888888888</dd>
<dd><span>邮箱:</span>sales@ABCDE.com</dd>
<dd><span>地址:</span>深圳市福田区上步南路ABCDE大厦R座9D</dd>
html;
preg_match_all('/<\/span>(.*?)<\/dd>|<dt>(.*)<\/dt>/m',$str,$arr);
print_r($arr);

------解决方案--------------------
PHP code
<?php
$str=<<<STR
<dt>深圳市ABC电子有限公司</dt>
<dd><span>联系人:</span>张先生</dd>
<dd style="color: rgb(68, 153, 0);"><span>网址:</span><span class="website">Http://www.ABCDE.com</span></dd>
<dd><span>传真:</span></dd>
<dd><span>电话:</span>0755-888888888</dd>
<dd><span>邮箱:</span>sales@ABCDE.com</dd>
<dd><span>地址:</span>深圳市福田区上步南路ABCDE大厦R座9D</dd>
STR;

preg_match_all('/<d[dt][^>]*>(?:<span>(.*?):<\/span>)?(?:<span[^>]*>)?(.*?)(?:<\/span>)?<\/d[dt]>/m',$str,$matches);
print_r($matches[1]);
print_r($matches[2]);

/*Array
(
    [0] => 
    [1] => 联系人
    [2] => 网址
    [3] => 传真
    [4] => 电话
    [5] => 邮箱
    [6] => 地址
)
Array
(
    [0] => 深圳市ABC电子有限公司
    [1] => 张先生
    [2] => Http://www.ABCDE.com
    [3] => 
    [4] => 0755-888888888
    [5] => sales@ABCDE.com
    [6] => 深圳市福田区上步南路ABCDE大厦R座9D
)
*/

------解决方案--------------------
呃...
还需要改进的话分别按照:切割一下字符串就出来了...

PHP code

$str=<<<HTML
<dt>深圳市ABC电子有限公司</dt>
 <dd><span>联系人:</span>张先生</dd>
<dd style="color: rgb(68, 153, 0);"><span>网址:</span><span class="website">Http://www.ABCDE.com</span></dd>
<dd><span>传真:</span></dd>
<dd><span>电话:</span>0755-888888888</dd>
<dd><span>邮箱:</span>sales@ABCDE.com</dd>
<dd><span>地址:</span>深圳市福田区上步南路ABCDE大厦R座9D</dd>
HTML;

echo strip_tags($str);