2010-12-08 8 views
0

PHP => Wie kann ich durch diese Zeichenfolge so suchen, wenn ich class="font8text">N</span>' habe, um mir "EARLL" zu geben, die in der nächsten <span> ist.regexp, um dieses Muster zu finden

<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

einen HTML-Parser verwenden -> Suchen Sie ein Element mit der richtigen Klasse und Inhalt -> abrufen, den Inhalt des nächstfolgenden Element –

+0

Sonderbare, behauptet die Frage über PHP zu sein, aber ist getaggte jquery stattdessen. Es kann nicht beides sein, oder? –

+0

check this http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

Antwort

0

Ich glaube, du bist besser dran, miteinander unter Verwendung strpos und substr prägnant.

Beispiel:

$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

Dies würde es tun:

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

EARLL würde im ersten Match-Gruppe sein. Versuchen Sie es unter Rubular.

1

Verwenden eines DOM-Parser wie: http://simplehtmldom.sourceforge.net/

Wie erwähnt (a painless amount of times). Regex ist keine gute Möglichkeit, HTML zu analysieren. Eigentlich können Sie HTML mit Regex nicht wirklich analysieren. HTML ist nicht regulär in irgendeiner Form. Sie können nur Bits extrahieren. Und das sind immer noch (in den meisten Fällen) sehr unzuverlässige Daten.

Es ist besser, einen DOM-Parser zu verwenden. Weil ein Parser, der den HTML-Code zu einem Dokument analysiert, das Traversieren erleichtert.

Beispiel:

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 für dom parser ... statt [dam regx for this] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) –