【问题标题】:RegEx for linked images of certain classRegEx 用于特定类别的链接图像
【发布时间】:2015-09-02 17:04:40
【问题描述】:

我无法访问我服务器上的 HTML 解析器,因此我需要通过 RegEx 和 PHP 来执行此操作。我想在一个大的内容字符串中匹配所有出现的某个类的链接图像。

这是从我要匹配的较大内容字符串中提取的示例:

<a href='url'><img width="150" height="150" src="url" class="attachment-thumbnail" alt="Description" /></a>

这似乎与 class="attachment-thumbnail" 匹配

(class=("|"([^"]*)\s)attachment-thumbnail("|\s([^"]*)"))

这似乎匹配了从开始 HREF 到结束 HREF 的所有内容,但它也会获取较大内容字符串中没有 class="attachment-thumbnail" 的其他图像

/(<a[^>]*)(href=)([^>]*?)(><img[^>]*></a>)/igm

如何将以上两者结合起来只匹配 class="attachment-thumbnail" 的 HREFed 图片?

感谢您的帮助。

【问题讨论】:

  • 你的输入输出是什么?
  • PHP 有各种内置的 HTML 解析器
  • 我的输入将是页面的整个 HTML 源,我的输出将是相同的 HTML 源,只是去掉了 class="attachment-thumbnail" 的所有链接图像 - 如下例所示:
  • 你应该可以通过DOMDocument轻松做到这一点

标签: php regex


【解决方案1】:

尝试以下方法:

$html = '<a href="http://www.google.com"><img width="150" height="150" src="url" class="attachment-thumbnail" alt="Description" /></a>';
$doc = new DOMDocument();
$doc->loadHTML($html);
foreach($doc->getElementsByTagName('img') as $item)
{
    $doc->saveHTML($item);
    if ($item->getAttribute('class') == 'attachment-thumbnail')
    {
        echo $item->getAttribute('src');
    }
} 

要删除与“附件缩略图”类匹配的所有元素:

$html = '<a href="http://www.google.com"><img width="150" height="150" src="url" class="attachment-thumbnail" alt="Description" /></a>';
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
foreach($xpath->query('//div[contains(attribute::class,"attachment-thumbnail")]') as $elem)
{
    $elem->parentNode->removeChild($elem);
}
echo $dom->saveHTML($doc->documentElement);

【讨论】:

  • 嗨,Erik-我刚刚尝试过,但我的脚本失败了——所有 PHP 安装中都包含 DOMDocument 吗?我在 GoDaddy 上,所以,如果没有,我可能无法访问它。另外,我想要做的是输出去除附件缩略图类的所有链接图像的 HTML。有没有办法反转你的代码以输出除那些之外的所有内容?谢谢!
  • @user64391 默认情况下应该包含它,php.net/manual/en/dom.requirements.php。你运行的是什么 PHP 版本?您收到什么错误消息?
  • $html = 'google.com"><img width="150" height="150" src="url" class="attachment-thumbnail" alt="Description" />'; $dom = new DOMDocument(); $dom->loadHTML($html); $xpath = new DOMXPath($dom); foreach($xpath->query('//div[contains(属性: :class,"attachment-thumbnail")]') as $elem) { $elem->parentNode->removeChild($elem); } echo $dom->saveHTML($doc->documentElement);
  • @ErikFlitman 如果您需要更新您的答案,请使用edit 链接。代码不应该放在 cmets 中,除非它很短,在这里很难阅读。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
  • 2012-06-21
  • 1970-01-01
  • 2015-04-25
  • 2015-04-09
  • 1970-01-01
  • 2019-02-06
相关资源
最近更新 更多