preg_match_all , get all img tag that include a st

2019-04-11 16:15发布

问题:

this code get all img tags

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

but I want get tags that their filenames includes "next.gif" or "pre.gif"

for example :

$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">
';

and I output should be like this :

   <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:

I'd have to go with this one:

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

Or in 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

-- edit: Oops. I made a mistake. The . in pre.gif and next.gif in the regexp the regexp must be escaped!! I didn't before. -- edit

PS. You might be using preg_match_all wrong. The arguments are: (pattern, subject, &matches)

PS. The results of my pattern + your subject:

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">
        )
)