【问题标题】:preg_match a specific contentpreg_match 特定内容
【发布时间】:2025-11-24 04:30:01
【问题描述】:

我对正则表达式真的很陌生,我需要帮助。我尝试了很多东西,但无法得到我需要的东西。

<img src="http://img03.imgsinemalar.com/images/afis_buyuk/m/Maske.jpg" title="Maske (1994) afişi" alt="Maske (1994) afişi" itemprop="image" width="164" height="234"/>

在此代码 srctitlealtwidthheight可以有不同的值。但是,itemprop 是一个常量,并且在源中有一个具有此属性的图像。如何用 PHP 获取它?

如果我的主题重复,我很抱歉,但我真的找不到解决方案。

【问题讨论】:

  • 但 itemprop 是恒定的,并且源中有一个具有此属性的图像。 ?这是什么意思,这里的来源是什么意思?
  • 我的意思是一张图片有一个“itemprop”属性。您可以从这里查看源代码:view-source:sinemalar.com/film/1000/maske
  • 您的来源包含许多 img 标签,其中一个具有此 itemprop 属性?我说的对吗?
  • 是的,你完全正确。
  • 为什么不选择 jquery?因为这个正则表达式非常耗时

标签: php regex preg-match preg-match-all


【解决方案1】:

你可以使用这个正则表达式:

%<img\s+src="(.*?)"\s+title="(.*?)"\s+alt="(.*?)"\s+itemprop="(.*?)"\s+width="(.*?)"\s+height="(.*?)"\s*?/>%

例子:

<?php

$myImage = '<img src="http://img03.imgsinemalar.com/images/afis_buyuk/m/Maske.jpg" title="Maske (1994) afişi" alt="Maske (1994) afişi" itemprop="image" width="164" height="234"/>';

preg_match_all('%<img\s+src="(.*?)"\s+title="(.*?)"\s+alt="(.*?)"\s+itemprop="(.*?)"\s+width="(.*?)"\s+height="(.*?)"\s*?/>%sim', $myImage, $matches, PREG_PATTERN_ORDER);

$src= $matches[1][0];
$title= $matches[2][0];
$alt= $matches[3][0];
$itemprop= $matches[4][0];
$width= $matches[5][0];
$height= $matches[6][0];


echo $src."\n";
echo $title."\n";
echo $alt."\n";
echo $itemprop."\n";
echo $width."\n";
echo $height."\n";

输出:

http://img03.imgsinemalar.com/images/afis_buyuk/m/Maske.jpg
Maske (1994) afişi
Maske (1994) afişi
image
164
234

演示:

http://ideone.com/tENd2b


根据您的 cmets 更新:

$html = file_get_contents("http://www.sinemalar.com/film/1000/maske");

preg_match_all('%<img src="(.*?)" alt="(.*?)" width="(.*?)" height="(.*?)" />%i', $html, $matches, PREG_PATTERN_ORDER);

$src= $matches[1][0];
$alt= $matches[2][0];
$width= $matches[3][0];
$height= $matches[4][0];


echo $src."\n";
echo $alt."\n";
echo $width."\n";
echo $height."\n";

输出:

http://simg02.imgsinemalar.com/img/sinemalarlogo.png
Sinemalar.com
211
51

注意:

您应该使用 php DOMDocument 来解析 html 而不是正则表达式。

【讨论】:

  • 有点问题。 Preg 应与此链接源代码匹配:sinemalar.com/film/1000/maske。从标志图像开始捕捉。
  • 现在我正在阅读有关 php DOMDocument 的内容,它正是我所需要的。谢谢佩德罗·洛比托。
  • 我使用了由 S.C. Chen (simplehtmldom) 编写的 PHP 类,并且使用此代码对我来说效果很好:$html = str_get_html($cek); print_r($html->find('img[itemprop]')[0]->attr['src']);
【解决方案2】:

如果要获取整个&lt;img&gt; 节点,可以使用带有XPath 的DOM:

<?php
   $dom = new DOMDocument;
   $dom->loadHTMLFile("http://www.sinemalar.com/film/1000/maske");
   $xp = new DOMXPath($dom);
   $qry = "//img[@itemprop='image']";
   $result = $xp->query($qry)->item(0);
   // To print it
   $newdoc = new DOMDocument();
   $cloned = $result->cloneNode(TRUE);
   $newdoc->appendChild($newdoc->importNode($cloned,TRUE));
   echo $newdoc->saveHTML();
?>

它将打印(连同一些警告):

<img src="http://img03.imgsinemalar.com/images/afis_buyuk/m/Maske.jpg" title="Maske (1994) afi&#351;i" alt="Maske (1994) afi&#351;i" itemprop="image" width="164" height="234">  

Demo

【讨论】: