【问题标题】:get image src from HTML with regex使用正则表达式从 HTML 获取图像 src
【发布时间】:2014-01-03 11:31:35
【问题描述】:

我有 HTML

<td class="td_scheda_modello_dati">

       <img src="/webapp/safilo/gen_img/p_verde.gif" width="15" height="15" alt="" border="0">

</td>

我想使用 preg_match_all() 从这个 HTML 中提取 img src。

我已经做到了

preg_match_all('#<td class=td_scheda_modello_dati>(.*)<td>#',$detail,$detailsav);

它应该给出整个 img 标签。但它没有给我 img 标签。那么应该做哪些改变才能得到具体的值呢?

【问题讨论】:

  • 如果我的回答对您有帮助,能否请您关闭问题?
  • @AliGajani 我从多个答案中得到了帮助!因此,不能将单个答案标记为已接受!感谢您的帮助:)
  • @MJQ:我同意,但仍将“一些答案”标记为绿色!

标签: php regex


【解决方案1】:

长话短说: ideone

您不应使用正则表达式,而应使用 HTML 解析器。方法如下。

<?php
$html = '<img src="/webapp/safilo/gen_img/p_verde.gif" width="15" height="15" alt="" border="0">';
$xpath = new DOMXPath(@DOMDocument::loadHTML($html));
$src = $xpath->evaluate("string(//img/@src)");
echo $src;
?>

【讨论】:

  • 虽然 HTML 解析器是理想的解决方案,但我感觉他正在寻找更短期的解决方案。此外,解析器可能在输出时无效correct 需要quirks
  • 我认为他可能没有意识到可以使用 HTML 解析器而不是 Regex 来完成此类任务。我已经为他提供了一个不错的解决方案。
  • 最佳实践+1。
【解决方案2】:

试试这个代码。

$html_text =  '<td class="td_scheda_modello_dati">   
            <img src="/webapp/safilo/gen_img/p_verde.gif" width="15" height="15" alt=""    border="0"></td>';

preg_match( '/src="([^"]*)"/i', $html_text , $res_array ) ;

print_r($res_array);

【讨论】:

  • Kumar,我在 html 中有多个 img 标签,如果我只想要 ... 中标签的 src 怎么办? ???跨度>
  • MJQ,我完全支持快速正则表达式修复,但如果每个表格单元格中有多个图像,则需要 2 个正则表达式才能获取所有 src 并且更容易出错。
【解决方案3】:

尝试在您的正则表达式之后使用s 修饰符。点字符的默认行为是不匹配换行符(您的示例具有)。

类似:

preg_match_all('#<td class=td_scheda_modello_dati>(.*)</td>#s',$detail,$detailsav);

应该做的伎俩。

关于修饰符的内容值得一读,正则表达式使用的越多,它们就越有用。

http://php.net/manual/en/reference.pcre.pattern.modifiers.php

编辑:另外,刚刚意识到发布的代码缺少结束 td 标记(它是 &lt;td&gt; 而不是 &lt;/td&gt;)。修正了我的示例以反映这一点。

【讨论】:

    【解决方案4】:

    试试这个:&lt;img[^&gt;]*src="([^"]*/gen_img/p_verde.gif)"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多