<img> 我这边有
preg_match_all("/\<img\s+.*?src=[\'\"]*([a-z0-9\/\-_+=.~!%@?#%&;:$\\()|]+)[\'\"\s\>]+/is", $msgarr['message'], $picurlarr);我不知道怎么把
怎么写呢?
2.preg_match_all用两个以上规则用|吗?

解决方案 »

  1.   

    $str = "<img src = '123456.jpg' />[img]123456.jpg[img]";
    $match = "/(<img\s+[^>].*>|\[img\].*?\[img\])/";
    preg_match_all($match , $str , $arr);
    var_dump($arr);
      

  2.   


    <?php
    $str = "<img src = '123456.jpg' />[img]123456.jpg[img]";
    $match = "/<img\s+src\s*=\s*['\"](.*?)['\"][^>]*?>|\[img\](.*?)\[img\]/";
    preg_match_all($match , $str , $arr);
    var_dump($arr);
    ?>
    array(3) {
      [0]=>
      array(2) {
        [0]=>
        string(26) "<img src = '123456.jpg' />"
        [1]=>
        string(20) "[img]123456.jpg[img]"
      }
      [1]=>
      array(2) {
        [0]=>
        string(10) "123456.jpg"
        [1]=>
        string(0) ""
      }
      [2]=>
      array(2) {
        [0]=>
        string(0) ""
        [1]=>
        string(10) "123456.jpg"
      }
    }
      

  3.   


    最好还要再考虑一下img标签里是否还有其他的属性,更完整一些
      

  4.   


    如果按照
    preg_match_all("/\<img\s+.*?src=[\'\"]*([a-z0-9\/\-_+=.~!%@?#%&;:$\\()|]+)[\'\"\s\>]+/is", $msgarr['message'], $picurlarr);
    的话 
    [img]怎么写为什么("/\[img\s+.*?src=[\'\"]*([a-z0-9\/\-_+=.~!%@?#%&;:$\\()|]+)[\'\"\s\>]+/is"
    这样不对?