/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,
$str=curl_exec($ch); //执行
header("Content-Type:text/html;charset=utf-8");
function preg_substr($start, $end, $str) // 正则截取函数
{
}
function str_substr($start, $end, $str) // 字符串截取函数
{
}
$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('不允许访问');
}
?>