php匹配模式从文本文件中获取图像

时间:2012-01-22 19:39:36

标签: php regex

当人们询问如何从网页内容/文本等中获取和提取图像的实际URL时,我已经看到了许多答案,但是,在我的数据库中,遗憾的是,我有这样的语法:

<img class="photo" src="http://domain.com/image.jpg" alt="alt goes here" />

因此,$pattern = '/src=["|\']([^"|\']+)/is';的典型方式在我的案例中不起作用,因为那些“...... 已经尝试了几个小时,我必须做一些非常错误的事情...... 非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

首先,'常用方法'是使用HTML / XML解析器,而不是正则表达式。

其次,你所拥有的是HTML代码编码为HTML文本,由于两个原因而闻起来很糟糕:

  • 它不再是HTML(为什么将它编码为HTML文本,实际上是HTML代码)?
  • 您不应该在将HTML放入数据库之前对其进行编码,而是在将其写入用户时进行编码。

除了这两个问题之外,你需要做的是htmlspecialchars_decode()那些东西并通过HTML解析器传递它:

$stuff = '<img class="photo" src="http://domain.com/image.jpg" alt="alt goes here" />';
$code = htmlspecialchars_decode($stuff, ENT_QUOTES);
$xml = simplexml_load_string($code);

那就是说,对我而言,这听起来像是修复编写错误代码的黑客。但可能有一个正当理由说明为什么它首先出现在那里。

答案 1 :(得分:1)

不要使用正则表达式!

使用Simple HTML DOM之类的XML / DOM库。

BTW,您正在寻找的正则表达式是

$pattern = '/src=(["\'])(.+)(?=\1)/i';

测试用例(可选):

这是一个测试它的简单程序。显然,您需要先使用htmlspecialchars_decode()从实体格式中对其进行解码。

$str = array(
    "<script type=\"text/javascript\" src=\"script.js\"></script>",
    "<script type=\"text/javascript\" src='script.js'></script>",
    '<script type="text/javascript" src="script.js"></script>',
    '<script type="text/javascript" src=\'script.js\'></script>',
);
$pattern = '/src=(["\'])(.+)(?=\1)/i';

foreach($str as $s){
    preg_match($pattern, $s, $m);
    echo $m[2], PHP_EOL;
}

输出

script.js
script.js
script.js
script.js

答案 2 :(得分:0)

您可以在此处测试Regex:

http://gskinner.com/RegExr/

什么不起作用?