PHP正则表达式

PHP正则表达式用到的参数主要有这几个,S/I/M三个参数,

/i (忽略大小写)
/g (全文查找出现的所有匹配字符)
/m (多行查找)
/gi(全文查找、忽略大小写)
/ig(全文查找、忽略大小写)

i 模式中的字符将同时匹配大小写字母
m 字符串视为多行
s 将字符串视为单行,换行符作为普通字符
x 将模式中的空白忽略

今天碰到一个问题,

1、preg_match_all只能匹配一次,最后加了个m参数就好了,发现原来字符串有换行

2、然后^字符是从后面的开始,如果字符串不是从这个后面的字符开始的就匹配不到了,不要每一个正则表达式就用上“^,$”字符,仅在需要以某字符开始,某字符结束的时候再使用,否则匹配不到!

一个采集的案例:

 

<?php

$ch = curl_init(); //初始化

$url='http://3dkb.cnhubei.com/kaijiang/default.aspx?type=2s&qi=07111';

curl_setopt($ch, CURLOPT_URL, $url); //你要访问的页面

curl_setopt($ch, CURLOPT_REFERER, 'http://3dkb.cnhubei.com'); //伪造来路页面

curl_setopt($ch,  CURLOPT_RETURNTRANSFER, true); 

$str=curl_exec($ch); //执行 

header("Content-Type:text/html;charset=utf-8");

function preg_substr($start, $end, $str) // 正则截取函数      

{      

    $temp = preg_split($start, $str);      

    $content = preg_split($end, $temp[1]);      

    return $content[0];      

}   

function str_substr($start, $end, $str) // 字符串截取函数      

{      

    $temp = explode($start, $str, 2);      

    $content = explode($end, $temp[1], 2);      

    return $content[0];      

}   

$str0=preg_substr("/<table cellspacing=\"0\" cellpadding=\"4\" border=\"0\" id=\"GridView1\"/", "/<\/table>/", $str);

preg_match_all("/<td\s+align=\"center\"><font\s+color=\".*?\">([^<]+)<\/font><\/td>/m",$str0,$str1);

print_r($str1);

curl_close($ch); //返回关闭

?>

第二个采集案例:

<?php

 

{dede:img ddimg=\'/dedegbk/uploads/allimg/130516/1-1305160ZH1-50.jpg\' text=\'\' width=\'800\' height=\'1140\'} /dedegbk/uploads/allimg/130516/1-1305160ZH1-50.jpg {/dede:img} {dede:img ddimg=\'/dedegbk/uploads/allimg/130516/1-1305160ZH1-51.jpg\' text=\'\' width=\'800\' height=\'1140\'} /dedegbk/uploads/allimg/130516/1-1305160ZH1-51.jpg{/dede:img}";

preg_match_all("/\}([^\{]*\.jpg)[\s]*\{/",$str,$matches);

print_r($matches[1]);

?>

第三个采集案例:

 

<?

//$url=isset($_GET['url'])?trim($_GET['url']):'';

//echo $url;

$url='http://v.youku.com/v_show/id_XNDk4NzIxOTI4.html';

if(strpos($url,'youku')){

if(!$content = @file_get_contents($url))

{

return "error";

}

else{

//$regexstr = '/<li class="v_thumb"><[img|IMG].*?[src|SRC]=[\'|\"](.*?(?:[\.gif|\.jpg|jpeg|png]))[\'|\"].*?\S*<\/li>/i';

$regexstr = '/<li class="v_thumb"><[img|IMG].*?[src|SRC]=[\'|\"](.*?)[\'|\"].*?\S*<\/li>/i';

$regexnum = preg_match($regexstr,$content,$matches);

print_r($matches);

}

}

else{

exit('不允许访问');

}

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值