php正则学了一些日子,抓了一些网站的数据,从而发现每次都自己写正则重新抓很麻烦,于是就想写一个抓取特定标签具有特定属性值的接口通用,直接上代码。
1
2
3
4
5
6
7
8
|
//$html-被查找的字符串 $tag-被查找的标签 $attr-被查找的属性名 $value-被查找的属性值
function get_tag_data( $html , $tag , $attr , $value ){
$regex = "/<$tag.*?$attr=\".*?$value.*?\".*?>(.*?)<\/$tag>/is" ;
echo $regex . "<br>" ;
preg_match_all( $regex , $html , $matches ,PREG_PATTERN_ORDER);
return $matches [1];
}
//返回值为数组 查找到的标签内的内容
|
下面随便给出一个例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
header( "Content-type: text/html; charset=utf-8" );
$temp = '<ul class = "noul clearfix" >
<li class = "w w0" >
<a class = "i i0 fc01 h" hidefocus= "true" href= "http://phpway.blog.163.com/" >首页</a>
</li>
<li class = "w w1 selected" >
<a class = "i i1 fc01 h" hidefocus= "true" href= "http://phpway.blog.163.com/blog/" >日志</a>
</li>
<li class = "w w9" >
<a class = "i i9 fc01 h" hidefocus= "true" href= "http://phpway.blog.163.com/loftarchive/" >LOFTER</a>
</li>
<li class = "w w2" >
<a class = "i i2 fc01 h" hidefocus= "true" href= "http://phpway.blog.163.com/album/" >相册</a>
</li>
<li class = "w w5" >
<a class = "i i5 fc01 h" hidefocus= "true" href= "http://phpway.blog.163.com/friends/" >博友</a>
</li>
<li class = "w w6" >
<a class = "i i6 fc01 h" hidefocus= "true" href= "http://phpway.blog.163.com/profile/" >关于我</a>
</li>
</ul>';
$result = get_tag_data( $temp , "a" , "class" , "fc01" );
var_dump( $result );
|
输出结果为
1
|
array (6) { [0]=> string(6) "首页" [1]=> string(6) "日志" [2]=> string(6) "LOFTER" [3]=> string(6) "相册" [4]=> string(6) "博友" [5]=> string(9) "关于我" }
|
查看源码可以看到
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
array (6) {
[0]=>
string(6) "首页"
[1]=>
string(6) "日志"
[2]=>
string(6) "LOFTER"
[3]=>
string(6) "相册"
[4]=>
string(6) "博友"
[5]=>
string(9) "关于我"
}
|
第一次写blog好紧张哈哈哈,希望会对大家有用,也希望大家能指出代码其中的问题,测试做的不是很多~~
以上所述是小编给大家介绍的PHP正则表达式抓取某个标签的特定属性值的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://blog.csdn.net/caoxun03/article/details/48879573