【问题标题】:Image tag scraper regular expression图片标签刮刀正则表达式
【发布时间】:2011-04-06 03:35:43
【问题描述】:

我真的不擅长正则表达式。它只是还没有点击。我正在尝试制作一个小型应用程序来提取其 src、宽度和高度属性的所有图像标签。这是我目前所拥有的:

<?php

function print_links ($url) 
{
    $fp = fopen($url, "r") or die("Could not contact $url");
    $page_contents = "";
    while ($new_text = fread($fp, 100)) {
        $page_contents .= $new_text;
    }


    $match_result = 
    preg_match_all( '/<img.*src=[\"\'](.*)[\"\'].*width=(\d+).*height=(\d+).*/>/i',
                $page_contents,
                $match_array, 
                PREG_SET_ORDER);

  echo "number matched is: $match_result<br><br> ";

  print_r($match_array);

  foreach ($match_array as $entry) {
   $tag = $entry[0];
   $src = $entry[1];
   $width = $entry[2];
   $height = $entry[3];
   print  (" <b>src</b>: $src; 
        <b>width</b>:  $width<br />
        <b>height</b>:  $height<br />
        <b>tag</b>:  $tag<br />"
        );
    }

}

print_links ("http://www.drudgereport.com/");

?>

但我得到了这个小错误:

警告:preg_match_all(): Unknown modifier '>' in C:\Apache2.2\htdocs\it302\regex\regex.php 第 17 行匹配的数字是:

我不确定我的正则表达式哪里出错了。我尝试了多种方法,但最终还是很困惑。

有什么建议吗?

【问题讨论】:

  • 不幸的是,这是一个需要正则表达式的赋值:/

标签: regex preg-match-all


【解决方案1】:

在您的正则表达式中,最后一个 .*/&gt; 是错误的。

那里没有/...

/<img.*src=[\"\'](.*)[\"\'].*width=(\d+).*height=(\d+).*>/i

\/? 转义并使其成为可选...

/<img.*src=[\"\'](.*)[\"\'].*width=(\d+).*height=(\d+).*\/?>/i

但此正则表达式仅在 src 宽度高度在 img 标记内按此给定顺序且宽度和高度也允许引用值和单位时才有效。例如width="0.9em" 是有效的 html...
这就是为什么您不应该使用正则表达式来解析 html 的所有原因(还有更多...)

【讨论】:

  • 我知道,我讨厌我们的教授让我们这样做,但我必须这样做。感谢您的帮助!
【解决方案2】:

不要为此使用正则表达式。特别是如果你真的很糟糕:)

http://simplehtmldom.sourceforge.net/

foreach($html->find('img') as $element){
   $src = $element->src;
   $width = $element->width;
   $height = $element->height;
   print  (" <b>src</b>: $src; 
        <b>width</b>:  $width<br />
        <b>height</b>:  $height<br />
        <b>tag</b>:  $tag<br />"
        );
   }

【讨论】:

  • 不幸的是,这是一个需要正则表达式的赋值:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
相关资源
最近更新 更多