2010-12-08 5 views
0

PHP => Comment puis-je rechercher à travers cette chaîne de telle sorte que quand j'ai class="font8text">N</span>' pour me donner «EARLL» qui est dans le prochain <span>.regexp pour trouver ce modèle

<div align="left" style=";">  
<span style="width:15px; padding:1px; border:1pt solid #999999; background-color:#CCFFCC; text-align:center;" class="font8text">Y</span> 
<span style="text-align:left; white-space:nowrap;" class="font8text">DINNIMAN</span> 
</div> 

<div align="left" style="background-color:#F8F8FF;"> 
    <span style="width:15px; padding:1px; border:1pt solid #999999; background-color:#FFCCCC; text-align:center;" class="font8text">N</span> 
    <span style="text-align:left; white-space:nowrap;" class="font8text">EARLL</span> 
</div> 
+6

Utilisez un analyseur HTML -> Trouver un élément avec la bonne classe et son contenu -> récupérer le contenu du prochain élément successif –

+0

étrange, la question prétend être à propos de PHP, mais est étiqueté jquery à la place. Ça ne peut pas être les deux, n'est-ce pas? –

+0

cochez cette case http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

Répondre

0

Je pense que vous feriez mieux d'utiliser strpos et substr succincte les uns avec les autres.

Exemple:

$str = <insert your string here>; // populate data 
$_find = 'class="font8text">'; // set the search text 
$start = strpos($str,$find) + strlen($_find); // find the start off the text and offset by the $needle 
$len = strpos($str,'<',$start) - $start; find the end, then subtract the start for length 
$text = substr($str,$start,$len); // result 
0

Cela ferait:

/class="font8text">N.*?class="font8text">(.*?)</m 

EARLL serait dans le premier groupe de match. Essayez-le sur Rubular.

1

utiliser un analyseur DOM comme: http://simplehtmldom.sourceforge.net/

Comme mentionné (a painless amount of times). Regex n'est pas un bon moyen d'analyser HTML. En fait, vous ne pouvez pas vraiment analyser HTML avec Regex. HTML n'est pas régulière dans n'importe quelle forme. Vous ne pouvez extraire que des bits. Et c'est toujours (dans la plupart des cas) des données très peu fiables.

Il est préférable d'utiliser un DOM-analyseur. Parce qu'un analyseur qui analyse le code HTML à un document, le rend plus facile à parcourir.

Exemple:

include_once('simple_html_dom.php'); 

$dom = file_get_html('<html>...'); 

foreach($dom->find("div.head div.fact p.fact") as $element) 
    die($element->innertext); 
+0

+1 pour dom parser ... au lieu de [dam regx for this] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) –

Questions connexes