想匹配一个网页地址中的所有图像地址,写了正则表达式如下:
$reg="/<img\s*.*src\s*=\s*[\"|\']?\s*([^>\"\']*)/i";为什么像如下的图像文件地址:
<img src="../Images/Album Cover/album_012.jpg">
只能匹配到:
<img src="../Images/Album
到空格的时候就终止了?
([^>\"\']*)这个条件应该不包含空格啊?

解决方案 »

  1.   

    $reg="/<img\s*.*src\s*=\s*[\"|\']?\s*([^>\"\']*)/i";
    $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
            ))
      

  2.   


    $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的处理了,试了一下新浪首页,百度啊什么的,好多图片地址无法匹配出来,最明显的就是图片路径里包含空格的
      

  3.   


    很奇怪我用的chrome,输出如下:
    Array
    (
        [0] => Array
            (
                [0] => 数组没有完整输出。。后面的括号都没了