Xpoint
   [напомнить пароль]

Проблема с регулярным выражением

Метки: [без меток]
2009-01-21 12:18:59 [обр] † Stratos †[досье]

имеется код

define ('TMP_IMAGE', '/new_qti/editor/tmp');

    
$imgs = array();

function replace ($matches) {
        global $imgs;
        
        $imgs[] = $matches[3];

        return $matches[0];
}


$str = '<p>текст вопроса</p>
<p>с картинкой <img height="80" alt="" width="80" src="/new_qti/editor/tmp/logo_edu.gif" /></p>
<img height="80" alt="" width="80" src="/new_qti/editor/tmp/logo_edu.gif" />';

$str = str_replace ("\n", "", $str);

echo htmlspecialchars ($str);
$pattern = "/(.*)img(.*)src=\"". str_replace ('/', '\/', TMP_IMAGE) ."\/(\S*)\"(\s?)\/>(.*)/";
$str = preg_replace_callback ($pattern, "replace", $str);

echo "<pre>";
print_R($imgs);

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

подскажите пожалуйста, где ошибка в регулярном выражении?

спустя 25 минут [обр] MiRacLe(47/77)[досье]
сообщение промодерировано

Какой-то бред.
С одной стороны нужны совпадения (match), а используется replace...
К тому же (.*) в начале и в конце захватят ВСЮ строку...

Используйте preg_match_all, обозначьте границы тега img.

спустя 7 минут [обр] † Stratos †[досье]

replace используется потому что еще и замена нужна
/new_qti/editor/tmp/logo_edu.gif
на
logo_edu.gif

MiRacLe[досье]К тому же (.*) в начале и в конце захватят ВСЮ строку...
кажется врубился! спасибо!

$pattern = "|img([^>]*)src=\"". str_replace ('/', '\/', TMP_IMAGE) ."\/(\S*)\"(\s?)\/>|";

Powered by POEM™ Engine Copyright © 2002-2005