2012-06-10 6 views
1

J'essaie d'utiliser preg_match pour récupérer le texte entre deux balises HTML.PHP preg_match pour saisir du texte entre deux balises HTML

est ici une version simplifiée de mon code:

$sPattern = "/<li class=\"sample\">(.*?)<\/li>/s"; 
$sText = "blah blah blah <li class=\"sample\">hello world!</li> blah blah blah"; 
preg_match($sPattern,$sText,$aMatch); 
echo '<pre>'.print_r($aMatch).'</pre>'; 

Cependant, quand je lance ce code, je reçois la chaîne complète HTML retourné:

<li class=\"sample\">hello world!</li> 

Est-ce que quelqu'un sait ce que les changements que je dois faire à mon expression régulière?

Remarque: Je connais d'autres moyens d'analyser les données d'une page HTML. Pour diverses raisons, DOMDocument et DOMXPath ne sont pas une option - je m'en tiens à RegEx.

+0

faire un 'strip_tags (') sur le résultat :) –

+0

drôle;) j'espère que je peux obtenir l'expression régulière pour faire ce qu'il devrait faire. –

+0

Répondu, mais [mention obligatoire] (http://stackoverflow.com/a/1732454). – Dan

Répondre

1

Vous devez accéder à la sortie du groupe de capture.

var_dump($aMatch[1]); 

Here is a demo montrant que le regex fonctionne bien, vous êtes juste d'accéder au tableau résultant de manière incorrecte.

+1

nickb est correct - s'avère que ma re-création du code n'était pas exactement représentatif du problème. J'accédais à $ aMatch [0] au lieu de $ aMatch [1]. Merci pour l'aide nickb - J'accepterai la réponse une fois possible dans quelques minutes. –

+0

Vous êtes les bienvenus :) – nickb

6

Cela devrait fonctionner comme vous le souhaitez:

$sPattern = "/<li class=\"sample\">(.*?)<\/li>/s"; 
$sText = "blah blah blah <li class=\"sample\">hello world!</li> blah blah blah"; 
preg_match($sPattern,$sText,$aMatch); 
echo '<pre>'.$aMatch[1].'</pre>'; 
+0

Il renvoie "bonjour monde!" quand je cours, ce que je suppose est ce que tu veux? –

Questions connexes