2010-07-29 9 views
0

Après avoir visionné quelques réponses sur stackoverflow,Regex PHP supprimer certains mots clés

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]; 

Le code ci-dessus trouve img title, mais cependant il retourne comme "Waterfall fountain" au lieu de Waterfall fountain, remarquez il y a "

Que dois-je ajouter dans regex pour supprimer "?

Merci

+2

réponses Apparemment pas assez ... le sujet est battu à cendres fines. PHP a un analyseur HTML, qui fera mieux qu'une regex. – Kobi

Répondre

1

déplacer les citations en dehors de vos supports

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

Il suffit de déplacer le " hors du groupe de capture:

'/(title)="([^"]*)"/i' 
+0

Si vous traitez un code existant qui n'entoure pas les attributs avec des guillemets, utilisez ceci: ''/ (title) ="? ([^ "] *)"?/I'' Cela fonctionne aussi si la valeur est faite Ne pas contenir d'espace – HalfBrian

0

vous actuellement faites la " partie de la match qui est rappelé. Vous pouvez mettre les guillemets en dehors de la parenthèse:

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

Parenthèses dans une expression régulière font un groupe de capture, qui contrôlent ce que sont stockés dans $img[$img_tag]. Votre groupe a inclus les citations: ("[^"]*"). Si vous ne voulez pas les guillemets, déplacez-les simplement hors du groupe: "([^"]*)"

1

Déplacez les guillemets hors de vos parenthèses.

Vérifiez ceci:

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

Utilisez un parseur XML et ce XPath pour obtenir tous les titres des éléments img:

//img/@title 

Exemple avec DOM

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

Lectures complémentaires: