【问题标题】:Regex to extract specific urls from <img> tags in an HTML document正则表达式从 HTML 文档中的 <img> 标记中提取特定 url
【发布时间】:2011-07-20 20:04:00
【问题描述】:

我正在尝试从某些内容的正文中提取特定的 url 模式,并将其替换为新形成的 url。但是我的正则表达式模式遇到了问题,想看看您是否可以帮助我。

这是我正在测试的代码:

$body = '<p><img src="/file/637/view" height="540" width="640"></p>';
$pattern = '/src="/file/(0-9)+/view"/';
$pattern = '/src="/file/(.)+/view"/';
$pattern = '/"/file/[0-9]+/view"';
$pattern = '/\<img src="(.)+"(.)+"\>/';

preg_match($pattern, $body, $matches);

现在,最后一个模式将抓取整个图像标签,这很好,但我希望它提取所有使用“/file/(some number)/view”模式的图像 url(只是 url)这样我就可以形成新的网址,然后对它们进行字符串替换。当我在 $matches var 上运行 print_r 时,所有其他人都找不到任何东西。

显然,正文字符串代表我正在扫描的内容正文。关于如何使其工作并仅获取图像网址的任何建议?这必须适用于多个图像与许多其他 html (包括锚标记)混合的情况。

【问题讨论】:

  • 真正的问题是,你为什么使用正则表达式和 xml 解析?
  • @tandu 上次我检查在一小块内容上运行一点正则表达式比将 html 段解析为一个对象然后对其运行操作更便宜(资源方面)将其从对象转换回 html。因此,除非你有一个令人信服的论据来说明如何更有效地解析 HTML、修改它,然后将其转换回来,否则我想我会坚持使用正则表达式。

标签: php html regex pattern-matching


【解决方案1】:

尝试将(.) 替换为(.*?) 或针对您的问题,尝试关注

$body = '<p><img src="/file/637/view" height="540" width="640"></p>';
$pattern = '/\/file\/([0-9]+)\/view/';


preg_match($pattern, $body, $matches);

【讨论】:

  • 你是这个意思吗? $pattern = '/src="/file/(.*?)+/view"/';
  • 需要在此处转义一些斜杠(或者最好更改分隔符)。
【解决方案2】:

你需要转义斜线,我认为你有一些未转义的斜线

试试这个:

$body = '<p><img src="/file/637/view" height="540" width="640"></p>';
$pattern = '/<img src="\/file\/([0-9]+)\/view"/'

preg_match($pattern, $body, $matches);

echo ($matches[1]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 2017-11-06
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多