/<img .*src=['\"]?([^'\"]+)['\"]?.*>/isU
这样子行不?

解决方案 »

  1.   

    /<img .*src=(['\"]?)(.+)\\1.*>/isU['\"]? 匹配0-1个'或"
    注意向后引用的使用,不能简单的[^'\"]+虽然很怪异,在文件名中出现引号并不是不可能的
      

  2.   

    <?php
    $str = "<img src = http://xx.com/a.gif >";
    preg_match_all("/<img\s+src\s*=\s*[\'\"]?([^\'\">\s]*)[\'\"]?\s*>/isU", $str, $arr);
    print_r($arr);
    ?>
      

  3.   

    如果除去<img src="http://aa.com/a.gif>这种情况,这样:<?php
    $str = "<img src = 'http://xx.com/a.gif' >";
    preg_match_all("/<img\s+src\s*=\s*([\'\"]?)([^\'\">\s]*)\\1\s*>/isU", $str, $arr);
    print_r($arr);
    ?>
      

  4.   

    何必这么麻烦呢,只匹配 <img 和紧接着的一个 > 不就行了。<img[a-z0-9][^>]*>试试这个
      

  5.   

    to 唠叨:谢谢,不过不考虑这种情况,否则的话正则没法表达了。to zhiin稚鹰:
    <?php
    $str = "<img src = http://xx.com/a.gif border=0>";
    preg_match_all("/<img\s+src\s*=\s*['\"]?([^'\">\s]*)['\"]?\s*.*>/isU", $str, $arr);
    print_r($arr);
    ?>
    这样不行。
      

  6.   

    <?php
    $str = "<img src = 'http://xx.com/a.gif' border=0 >
    <img src = 'http://xx.com/a.gif' border=0 >
    <img src = 'http://xx.com/a.gif' border=0 >";
    preg_match_all("/<img\s+src\s*=\s*([\'\"]?)([^\'\">\s]*)\\1\s*[^>]*>/i", $str, $arr);
    print_r($arr);
    ?>
      

  7.   

    更全面一点的:
    <?php
    $str = "<img src = 'http://xx.com/a.gif' border=0 >
    <img src = b.gif border=0 >
    <img style = \"padding:2px\" src = \"http://xx.com/a.gif\" border=0 >";
    preg_match_all("/<img\s+[^>]*\s*src\s*=\s*([\'\"]?)([^\'\">\s]*)\\1\s*[^>]*>/i", $str, $arr);
    print_r($arr);
    ?>
      

  8.   

    <?
    $str = "<img ddd src = http://xx.com/a.gif bbddd>";
    preg_match_all("/<img .*src\s*=\s?(['\"]?)(.+)\\1\s?.*>/isU", $str, $arr);
    print_r($arr);这个为什么错误?