【问题标题】:php regex for finding image in a Text用于在文本中查找图像的 php 正则表达式
【发布时间】:2012-05-10 18:35:04
【问题描述】:

我不知道 php 正则表达式我希望从我的 html 中提取所有图像标签 <img src="www.google.com/exampleimag.jpg"> 我如何使用 preg_match_all 来做到这一点

感谢 SO 社区为您提供宝贵的时间

我的情况是这样的,没有整个 html dom,而只是一个带有 img 标签的变量$text="this is a new text <img="sfdsfdimg/pfdg.fgh" > there is another iamh <img src="sfdsfdfsd.png"> hjkdhfsdfsfsdfsd kjdshfsd dummy text

【问题讨论】:

  • 您只想要所有图片,不管它们的src 值是多少?
  • 不要使用正则表达式解析 HTML;阅读 DomDocument - php.net/domdocument
  • 使用 PHP HTML 解析器而不是正则表达式。 HTML 和正则表达式不能很好地混合。
  • @JonathanSampson 当我的情况如上时,我是否也需要 domdocument
  • @spiderman 我刚刚测试了你的文字,发现图像很好。

标签: php regex preg-match-all


【解决方案1】:

不要使用正则表达式来解析 HTML。相反,请使用类似 DOMDocument 的东西,因为这个原因而存在:

$html = 'Sample text. Image: <img src="foo.jpg" />. <img src="bar.png" />';
$doc = new DOMDocument();
$doc->loadHTML( $html );

$images = $doc->getElementsByTagName("img");

for ( $i = 0; $i < $images->length; $i++ ) {
  // Outputs: foo.jpg bar.png
  echo $images->item( $i )->attributes->getNamedItem( 'src' )->nodeValue;
}

如果您愿意,您也可以获取图像 HTML 本身:

// <img src="foo.jpg" />
echo $doc->saveHTML ( $images->item(0) );

【讨论】:

    【解决方案2】:

    You can't parse HTML with regex。你最好使用 DOM 类。它们使从有效的 HTML 树中提取图像变得非常容易。

    $doc = new DOMDocument ();
    $doc -> loadHTML ($html);
    $images = $doc -> getElementsByTagName ('img'); // This will generate a collection of DOMElement objects that contain the image tags
    

    【讨论】:

      猜你喜欢
      • 2015-11-08
      • 2014-01-30
      • 2013-05-14
      • 2016-08-26
      • 2011-07-24
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      相关资源
      最近更新 更多