想匹配一个网页地址中的所有图像地址,写了正则表达式如下:
$reg="/<img\s*.*src\s*=\s*[\"|\']?\s*([^>\"\']*)/i";为什么像如下的图像文件地址:
<img src="../Images/Album Cover/album_012.jpg">
只能匹配到:
<img src="../Images/Album
到空格的时候就终止了?
([^>\"\']*)这个条件应该不包含空格啊?
$reg="/<img\s*.*src\s*=\s*[\"|\']?\s*([^>\"\']*)/i";为什么像如下的图像文件地址:
<img src="../Images/Album Cover/album_012.jpg">
只能匹配到:
<img src="../Images/Album
到空格的时候就终止了?
([^>\"\']*)这个条件应该不包含空格啊?
$s = '<img src="../Images/Album Cover/album_012.jpg">';
preg_match_all($reg, $s, $m);
print_r($m);Array
(
[0] => Array
(
[0] => <img src="../Images/Album Cover/album_012.jpg
) [1] => Array
(
[0] => ../Images/Album Cover/album_012.jpg
))
$url=$_POST['url'];
$rs=parse_url($url);
$main_url=$rs['host'];
$baseurl=substr($url,0,strrpos($url, '/')+1);
$message=file_get_contents($url);
$reg="/<img\s*.*src\s*=\s*[\"|\']?\s*([^>\"\']*)/i";
preg_match_all($reg, $message, $matches);
for($i=0;$i<count($matches[0]);$i++){ $matches[1][$i]=strtolower($matches[1][$i]);
if(!strpos('a'.$matches[1][$i], 'http')){
if(strpos('a'.$matches[1][$i], '/')==1){
$matches[1][$i]='http://'.$main_url.$matches[1][$i];
}elseif (strpos('a'.$matches[1][$i], '../')==1){
$matches[1][$i]=str_replace('../', '/', $matches[1][$i]);
$matches[1][$i]='http://'.$main_url.$matches[1][$i];
}else{
$matches[1][$i]=$baseurl.$matches[1][$i];
}
}
}
$img_array=array_unique($matches[1]);下面是对$img_array的处理了,试了一下新浪首页,百度啊什么的,好多图片地址无法匹配出来,最明显的就是图片路径里包含空格的
很奇怪我用的chrome,输出如下:
Array
(
[0] => Array
(
[0] => 数组没有完整输出。。后面的括号都没了