2010-06-20 3 views
3

C'est le genre de chaîne HTML j'effectuerons matchs sur:Comment obtenir cette expression régulière pour correspondre</span>

<span class="q1">+12 Spell Power and +10 Hit Rating</span> 

Je veux +12 Spell Power and +10 Hit Rating sur le code HTML ci-dessus. Voici le code que j'ai écrit:

preg_match('/<span class="q1">(.*)<\/span>/', $gem, $match); 

Mais en raison de <\/span> il est d'échapper à la / dans </span> il ne s'arrête pas le match, donc je reçois beaucoup plus de données que ce que je veux.

Comment puis-je échapper le / dans </span> tout en l'ayant toujours partie du modèle?

Merci.

Répondre

2

Je pense que la raison pour laquelle votre regex obtient plus que ce que vous voulez est parce que * est gourmand, correspondant autant que possible. Au lieu de cela, utilisez * ?, qui correspond le moins possible:

preg_match('/<span class="q1">(.*?)<\/span>/', $gem, $match); 
+0

Cela fonctionne merci. Raison Je ne veux pas utiliser la classe DOMDocument, c'est que c'est un très petit morceau de HTML et que ce code ne sera exécuté qu'une seule fois, je collectionne des données à mettre dans une base de données. Pas besoin de compliquer les choses. :) –

2
  1. Ne pas utiliser regex pour analyser HTML
  2. utilisation DOM, en particulier la méthode loadHTML et getElementsByTagName('span')

-

$doc = new DOMDocument(); 
    $doc->loadHTML($htmlString); 
    $spans = $doc->getElementsByTagName('span'); 
    if ($spans->length > 0) { 
    // loop on $spans 
    } 
Questions connexes