preg_match_all, получить все теги img, содержащие строку - PullRequest
3 голосов
/ 25 декабря 2010

этот код получает все теги img

preg_match_all('/<img[^>]+>/i',$a,$page);

но я хочу получить теги, которые включают в себя имена файлов "next.gif" или "pre.gif"

например:

$page = '
<img border="0" alt="icon" src="http://www.site.com/images/man.gif" width="90" height="90">
<img border="0" alt="icon" src="http://www.site.com/images/pre.gif" width="90" height="v">
<img border="0" alt="icon" src="http://www.site.com/images/2.gif">
<img border="0" alt="icon" src="http://www.site.com/images/next.gif" width="90" height="90">
';

и вывод должен быть таким:

   <img border="0" alt="icon" src="http://www.site.com/images/pre.gif" width="90" height="90">
    <img border="0" alt="icon" src="http://www.site.com/images/next.gif" width="90" height="90">

1 Ответ

1 голос
/ 25 декабря 2010

Мне бы пришлось пойти с этим:

/(<img[^>]*src=".*?(?:pre\.gif|next\.gif)"[^>]*>)/i

Или в PHP:

$regexp = '/(<img[^>]*src=".*?(?:pre\.gif|next\.gif)"[^>]*>)/i';
$iResults = preg_match_all($regexp, $str, $aMatches);
print_r($aMatches); // you'll see what you need

- редактировать: ОйЯ допустил ошибку.. in pre.gif и next.gif в регулярном выражении должны быть экранированы !!Я не раньше- редактировать

PS.Возможно, вы неправильно используете preg_match_all.Аргументы: (pattern, subject, &matches)

PS.Результаты моей картины + ваш предмет:

Array
(
    [0] => Array
        (
            [0] => <img border="0" alt="icon" src="http://www.site.com/images/pre.gif" width="90" height="v">
            [1] => <img border="0" alt="icon" src="http://www.site.com/images/next.gif" width="90" height="90">
        )
    [1] => Array
        (
            [0] => <img border="0" alt="icon" src="http://www.site.com/images/pre.gif" width="90" height="v">
            [1] => <img border="0" alt="icon" src="http://www.site.com/images/next.gif" width="90" height="90">
        )
)
...