用正则表达式替换图像

时间:2011-07-19 09:19:09

标签: php regex image

我想在这个字符串上找到并做一些操作:

<img src="images/video.png" border="0" alt="60" />
  1. 查找上下文中的每个出现事项
  2. 检索alt属性(在本例中为60)并使用此编号
  3. 替换整个图像
  4. 我一直在玩正则表达式,但它显然还不起作用:

        if (preg_match_all('<img src="images/video.png" border="0" alt="[^"]*">', $content, $regs)) {
        for($i=0;$i<count($regs[0]);$i++){
    
            echo $regs[0][$i] . "<br>";
            $id = preg_replace('alt="[^"]*"', "$1", $regs[0][$i]);
            echo "The id: " . $id . "<br>";
    
        }
    }
    

6 个答案:

答案 0 :(得分:2)

如何使用PHP Simple HTML DOM Parser

解析DOM

您可以从此处下载脚本:http://sourceforge.net/projects/simplehtmldom/files/

如果您将该脚本加载到当前脚本中,请执行以下操作:

include_once("simple_html_dom.php");

然后,您可以循环浏览HTML中的所有图像,并使用它们执行所需的操作:

$html = "Your HTML code";

foreach($html->find('img') as $element) {

    // Do something with the alt text
    $alt_text = $element->alt;

    // Replace the image
    $element->src = 'new_src';
    $element->alt = 'new_alt';

}

不使用库:

// Load the HTML
$html = "Your HTML code";
$dom = new DOMDocument();
$dom->loadHTML($html);

// Loop through all images
$images = $dom->getElementsByTagName('img');
foreach ($images as $image) {

  // Do something with the alt
  $alt = $image->getAttribute('alt');

  // Replace the image
  $image->setAttribute("src", "new_src");
  $image->setAttribute("alt", "new_alt");

}

// Get the new HTML string
$html = $dom->saveHTML();

答案 1 :(得分:1)

您应该使用DOM来解析XML / HTML ...

答案 2 :(得分:1)

正则表达式不是推荐的方法,因为格式错误的html很难准确地使用正则表达式。您想要查看DOMDocument:http://php.net/manual/en/class.domdocument.php

此处讨论了其他替代方案:

Robust and Mature HTML Parser for PHP

答案 3 :(得分:0)

php > $xml = new SimpleXmlElement('<img src="images/video.png" border="0" alt="60" />');
php > foreach($xml->xpath('//@alt') as $alt) echo "Id is: ",(string)$alt,"\n";
Id is: 60

答案 4 :(得分:0)

[将我的评论扩展为答案]

这里有一些示例代码可以帮助您开始使用PHP的DOM库:

$html = '...';
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);

// Build the XPath query (you can specify very complex criteria here)
$images = $xpath->query('//img[@src="images/video.png" and @border="0"]');

foreach($images as $image) {
    echo 'This image has alt = '.
         $image->attributes->getNamedItem('alt')->nodeValue.
         '<br />';
}

如果您想使用更高级的逻辑自定义查询,可以查看XPath tutorial

答案 5 :(得分:0)

你应该使用这个正则表达式

<img src="images/video.png" border="0" alt="([^"]*)" />

但是如果你也想承认这个输入

<img alt="60" src="images/video.png" border="0" />

以及任何其他可能的排列,那么最好自己匹配图像标记,然后匹配其内容的alt属性。