我应该使用哪个正则表达式从文本中获取图像链接?

时间:2012-03-11 06:25:53

标签: php

我有以下代码:

<center><img src="http://trustedyouautocorrect.com/wp-content/uploads/2012/02/ixxx66134057.jpg" alt="daniel7531sarah" /></center><input id="gwProxy" type="hidden" />

<!--Session data--><input id="jsProxy" onclick="if(typeof(jsCall)=='function'){jsCall();}else{setTimeout('jsCall()',500);}" type="hidden" />
<div id="refHTML"></div>

我需要制作将从image-src获取链接的脚本。我该怎么做?我希望你帮助我。谢谢。

2 个答案:

答案 0 :(得分:0)

我假设使用Javascript。最简单的方法是在img上放置一个id属性,然后就可以轻松地提取src了。

<script type="text/javascript">
    function getSRC() 
    {
        var imgID = document.getElementById("imgID");
        alert( imgID.getAttribute('src') );
    }
</script>


<img id="imgID" src="someIMG.png" /><br />
<a href="#" onclick="getSRC()">get</a>

答案 1 :(得分:0)

使用正则表达式提取img src ...

<?php
    $str = '<center><img src="http://trustedyouautocorrect.com/wp-content/uploads/2012/02/ixxx66134057.jpg" alt="daniel7531sarah" /></center><input id="gwProxy" type="hidden" />

<!--Session data--><input id="jsProxy" onclick="if(typeof(jsCall)==\'function\'){jsCall();}else{setTimeout(\'jsCall()\',500);}" type="hidden" />
<div id="refHTML"></div>';

    // regex to match all src attributes of image tags
    preg_match_all("/<img[^>]+src=(['\"])(.+?)\\1/",$str,$matches);
    // $matches{
    //  [0] -> the whole matched string
    //  [1] -> the quotation char (could be ' or ") captured so it can be used
    //          to match the closing quote (of the same type)
    //  [2] -> the src attr value
    // }

    // loop through each src attr value we captured
    foreach($matches[2] as $m){
        echo "This is what you are after ~~> " . $m;
    }
?>

正则表达式意味着......

  • <img后跟
  • 一个或多个>[^>]+)后跟
  • src=后跟
  • '"已被捕获以供日后使用和转发((['\"])
  • 后面是一堆不贪婪的东西(.+?
  • 后跟与转义之前捕获的相同引用(\\1

然而,这是解决问题的一种不好的方法,并且存在一些问题。我的正则表达式不捕获未引用的src属性。可能还有一些不寻常的情况,它与误报相匹配,或与真实网址不匹配。

正则表达式虽然在很多情况下都很棒,但作为配套模式的瑞士军刀,却是一个糟糕的解析器。当您需要解析HTML时,您应该使用适当的方法。

更好(更容易出错,更快,更容易理解和维护)的方式......

<?php
    $str = '<center><img src="http://trustedyouautocorrect.com/wp-content/uploads/2012/02/ixxx66134057.jpg" alt="daniel7531sarah" /></center><input id="gwProxy" type="hidden" />

<!--Session data--><input id="jsProxy" onclick="if(typeof(jsCall)==\'function\'){jsCall();}else{setTimeout(\'jsCall()\',500);}" type="hidden" />
<div id="refHTML"></div>';

   $DOM = new DOMDocument;
   $DOM->loadHTML($str);

   //get img tags
   $items = $DOM->getElementsByTagName('img');

   //loop through found image tags
   for ($i = 0; $i < $items->length; $i++){
        $node = $items->item($i);
        if ($node->hasAttributes()){
            // attach all attributes of tag to array
            foreach ($node->attributes as $attr){ 
                $array[$attr->nodeName] = $attr->nodeValue; 
            }
        }
        // print out just the src attribute
        echo "This is what you want ~~> " . $array['src'];
   }
?>