tags:

views:

55

answers:

6

Hi,

After viewing some answers on stackoverflow,

preg_match_all('/<img[^>]+>/i',$html, $result);
$img = array();
foreach( $result[0] as $img_tag)
{
    preg_match_all('/(title)=("[^"]*")/i',$img_tag, $img[$img_tag]);
}

//print_r($img);
foreach ($img as $imgg)
 echo $imgg[2][0];

The above code finds img title, but however it return as "Waterfall fountain" instead of Waterfall fountain, notice there is "

what should i add in regex to remove "?

Thank you

+1  A: 

move the quotes outside of your brackets

preg_match_all('/(title)="([^"]*)"/i',$img_tag, $img[$img_tag]); 
Mark Baker
+3  A: 

Just move the " out of the capturing group:

'/(title)="([^"]*)"/i'
Steven Xu
If you are dealing with legacy code that doesn't surround attributes with quotes, use this: `'/(title)="?([^" ]*)"?/i'` It also works if the quoted value does NOT contain a space
HalfBrian
A: 

Currently you are making the " part of the match that is remembered. You can put the quotes outside the parenthesis:

preg_match_all('/(title)="([^"]*)"/i',$img_tag, $img[$img_tag]);
codaddict
A: 

Parentheses in a regular expression make a capturing group, which control what get stored in $img[$img_tag]. Your group included the quotes: ("[^"]*"). If you don't want the quotes, just move them outside the group: "([^"]*)"

Michael Mrozek
+1  A: 

move the quotes outside of your brackets

preg_match_all('/(title)="([^"]*)"/i',$img_tag, $img[$img_tag]);

Antarctica Ant
+1  A: 

Use an XML Parser and this XPath to get all titles of img elements:

//img/@title

Example with DOM

$dom = new DOMDocument;
$dom->loadHML($html);
$xp = new DOMXPath($dom);
foreach($xp->query('//img/@title') as $attribute) {
    echo $attribute->nodeValue;
}

Further readings:

Gordon