Регулярное выражение скребка

Я действительно ДЕЙСТВИТЕЛЬНО плох в регулярных выражениях. Это просто еще не щелкнуло. Я пытаюсь сделать небольшое приложение, которое извлекает все теги изображений из их атрибутов src, width и height. Это то, что я до сих пор:

<?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(): неизвестный модификатор '>' в C:\Apache2.2\htdocs\it302\regex\regex.php в строке 17 соответствует:

Я не уверен, где я ошибся в своем регулярном выражении. Я перепробовал несколько вещей, но в итоге оказался таким же растерянным.

Какие-либо предложения?

2 ответа

Решение

В вашем регулярном выражении последнее .*/> неправильно.

нет / там...

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

или же \/? бежать и сделать это необязательно...

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

но это регулярное выражение работает только в том случае, если высота ширины src находится в указанном порядке в теге img, а ширина и высота также допускают указанные значения и единицы измерения. Например, ширина = "0,9em" является действительным HTML...
Это все причины, почему вы не должны использовать регулярные выражения для анализа HTML (и многое другое...)

Не используйте регулярные выражения для этого. Особенно, если ты ДЕЙСТВИТЕЛЬНО плохой:)

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 />"
        );
   }
Другие вопросы по тегам