【问题标题】:Wrong images, regular expressions [duplicate]错误的图像,正则表达式[重复]
【发布时间】:2014-10-20 17:49:43
【问题描述】:

我需要一点帮助。我有一个学校作业,我需要制作一个正则表达式脚本来获取图像(然后上传到数据库,但这不是问题)。真正的问题是我得到了一个包含页面中所有图像的数组,但应该是一个图像,即: data-src-l="/WebRoot/products/8020/80203122/bilder/80203122.jpg" 这是整个图像的代码:

  <li>
    <a href="/WebRoot/products/8020/80203122/bilder/80203122.jpg">
      <img
       itemprop="image"
       alt="Jesus Remember Me - Taize Songs (2CD)"
       src="/WebRoot/AsaphNL/Shops/asaphnl/5422/8F43/62EE/D698/EF8E/4DEB/AED5/3B0E/80203122_xs.jpg"
       data-src-xs="/WebRoot/AsaphNL/Shops/asaphnl/5422/8F43/62EE/D698/EF8E/4DEB/AED5/3B0E/80203122_xs.jpg"
       data-src-s="/WebRoot/products/8020/80203122/bilder/80203122_s.jpg"

       data-src-m="/WebRoot/products/8020/80203122/bilder/80203122_m.jpg"

       data-src-l="/WebRoot/products/8020/80203122/bilder/80203122.jpg"
     />
    </a>
  </li>

</ul>

这是 PHP 的代码:

<?php
header('Content-Type: text/html; charset=utf-8');
$url = "http://www.asaphshop.nl/epages/asaphnl.sf/nl_NL/?ObjectPath=/Shops/asaphnl/Products/80203122";
$htmlcode = file_get_contents($url);
$pattern = "/<img\s[^>]*?src\s*=\s*['\"]([^'\"]*?)['\"][^>]*?>/";
preg_match_all($pattern, $htmlcode, $matches);
//print_r ($matches);
$image = ($matches[0]);
$image = str_replace('src="/', 'src="http://www.asaphshop.nl/', $image);
print_r ($image);
?>

更新:图片链接前面必须是指向http://www.asaphshop.nl 的链接,因此它会在网站中查找图片。不在我的本地主机内。如果你不明白我的意思,你可以问;)

【问题讨论】:

  • 所以你想要data-src-l 中的一张图片,而不是src 中的一张,对吧?
  • 使用 dom 解析器而不是正则表达式。
  • @Rikesh 没错!
  • @AvinashRaj,我需要用正则表达式完成这项任务

标签: php regex


【解决方案1】:
(<img\s[^>]*?data-src-l\s*=\s*['\"])([^'\"]*?['\"])([^>]*?>)

试试这个。这将提供所需的img。替换为$1http://www.asaphshop.nl$2$3。查看演示。

http://regex101.com/r/wQ1oW3/29

【讨论】:

  • 警告:preg_match_all(): Unknown modifier ']' in C:\xampp\htdocs\stage\ripper2.php on line 6
  • 哪个src?有几个src的...
  • 是的。它以前没有用...这就是我寻求帮助的原因
  • 是的,之前我收到了警告,只是它是“c”而不是“]”......我看到了演示。我需要的答案是asaphshop.nl在data-src-l的代码前面。你知道我的意思吗?
  • 这是图片的来源网站。如果我不把那部分粘贴在前面,它会在我的本地主机中搜索(当然它不会在里面找到任何东西,因为图像不存在。
【解决方案2】:

我需要一点帮助。我有一个学校作业,我需要制作一个正则表达式脚本来获取图像(然后上传到数据库,但这不是问题)。

告诉你的学校正则表达式是not the best tool for the job

当然,有regular expressions are not so regular这个参数可以用于回文匹配等任务。但这并不意味着您应该使用它们,因为它会让您其他可能需要稍后使用您的代码的开发人员感到非常头疼。 p>

您应该使用适当的 HTML/XML 解析器。

幸运的是,PHP 有它需要的东西,它被称为DOMDocument。例如,看看它的getElementsByTagName 方法。您可以使用它来检索图像。然后您可以遍历所有属性并按照您想要的方式解析它们。

它不仅更安全,因为您不必担心边缘情况,而且它也更具可读性。

【讨论】:

  • 是的,确实如此!但我的学校认为这不是重点,他们希望我们学习它是如何工作的,而不是如果这是最好的方法。
  • 问了几次我的老师告诉我可以使用DOMDocument,但我没有使用它,请你解释一下吗?
  • 手册里都有……
猜你喜欢
  • 2013-10-05
  • 1970-01-01
  • 2011-04-10
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
相关资源
最近更新 更多