【问题标题】:match all images starting with pics.domain.com匹配所有以 pics.domain.com 开头的图片
【发布时间】:2013-04-01 17:05:06
【问题描述】:

如何匹配所有以pics.domain.com 开头的图片?

我试过的

preg_match_all('/<img .*src=(pics.domain.com*)["|\']([^"|\']+)/i', $row['story'], $matches);

【问题讨论】:

  • 在无数次的时间里,请使用 HTML 解析器来处理 HTML。使用 DOMDocument 挑出img 标签,然后使用正则表达式检查src 属性。
  • @nhahtdh - 它看起来确实来自数据库,但仍然很好。

标签: php regex


【解决方案1】:

使用DOMDocument 并简单地遍历每个&lt;img&gt; 标签;然后使用parse_url()找到每个图片路径的宿主:

$doc = new DOMDocument;
libxml_use_internal_errors(true);
$doc->loadHTML($row['story']);
libxml_clear_errors();

foreach ($doc->getElementsByTagName('img') as $img) {
    if (parse_url($img->getAttribute('src'), PHP_URL_HOST) === 'pics.domain.com') {
        echo "Yay, image found\n";
    }
}

【讨论】:

  • +1,实际上是根据 answer 输入相同的内容,但你打败了我!
【解决方案2】:

我过去使用过正则表达式,它也可以在 &lt;img&gt; 标签之外使用。

'@[\'"](https?://)?([^\.][^\'"]*?)(/)?([^\'"/]*?)\.(jpg|jpeg|png|gif|bmp)[\'"]@'

更具体的版本:

'@[\'"](https?://)?pics\.domain\.com[^\'"]*?\.(jpg|jpeg|png|gif|bmp)[\'"]@'

英文:

[开始引用](http 或 https 或两者都不是)pics.domain.com(任何不是引用的内容)(一些图像扩展名)[结束引用]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    相关资源
    最近更新 更多