2010-12-29 6 views
2

Ich spreche kein Englisch sehr gut. Also, wenn ich einen Fehler mache, bitte Entschuldigung.RegExp PHP Text zwischen mehreren Span Tags

Auf der Seite, die ich ein div-Box über Spiel mit einigen Informationen haben:

<span class="noteline">Developer:</span> 
<span class="subline">Gameloft</span> 
<span class="noteline">Genre:</span> 
<span class="subline">Racing/Arcade</span> 
<span class="noteline">Release year:</span> 
<span class="subline">2010</span> 

Ich brauche die Informationen zwischen <span class="noteline"> zu bekommen und es ist Endtag </span>

preg_match("/\<span\sclass=\"subline\"\>(.*)<\/span\>/imsU", $source, $matches); 

die Lösung oben funktioniert gut aber es bekommt nur die "Unterzeile" mit dem Text "gameloft";

aber ich brauche auch Unterlinien, die Text Racing/Arcade und 2010 haben;

Vielleicht so etwas (das funktioniert nicht);

for developer = preg_match("/*(\<span\sclass=\"subline\"\>){1}*(.*)*(<\/span\>){1}*/imsU", $source, $matches); 
for genre = preg_match("/*(\<span\sclass=\"subline\"\>){2}*(.*)*(<\/span\>){2}*/imsU", $source, $matches); 

so etwas wie dieses ..

Wie dem auch sei. Danke für jede Hilfe.

Antwort

0

Try this:

preg_match_all("/<span class=\"subline\".*span>/", $html, $matches); 

preg_match_all("/<span class=\"noteline\".*span>/", $html, $matches); 

habe ich versucht, den obigen Code auf diese Weise:

<?php 

$html = '<span class="noteline">Developer:</span> 
<span class="subline">Gameloft</span> 
<span class="noteline">Genre:</span> 
<span class="subline">Racing/Arcade</span> 
<span class="noteline">Release year:</span> 
<span class="subline">2010</span>'; 

preg_match_all("/<span class=\"subline\".*span>/", $html, $matches1); 

preg_match_all("/<span class=\"noteline\".*span>/", $html, $matches2); 

print_r($matches1); 
echo "<br>"; 
print_r($matches2); 

?> 

Der Ausgang Ich war bekam:

Array ([0] => Array ([0] => Gameloft [1] => Racing/Arcade [2] => 2010)) 
Array ([0] => Array ([0] => Developer: [1] => Genre: [2] => Release year:)) 
+0

Vielen Dank. Das scheint eine großartige Lösung zu sein. – Andy

1

Eine Alternative zu regexps sein würde Verwenden Sie phpQuery oder QueryPath, wodurch es vereinfacht wird:

foreach (qp($source)->find("span.subline") as $span) { 
    print $span->text(); 
} 
1

Reguläre Ausdrücke sind nicht zum Analysieren von HTML geeignet. Sie sind schwer zu bekommen und brechen immer in Grenzfällen.

Ich weiß nicht, ob es ein einfacher Weg ist, aber dies sollte mit dem Markup Sie beschreiben arbeiten:

<?php 

$fragment = '<span class="noteline">Developer:</span> 
<span class="subline">Gameloft</span> 
<span class="noteline">Genre:</span> 
<span class="subline">Racing/Arcade</span> 
<span class="noteline">Release year:</span> 
<span class="subline">2010</span>'; 

libxml_use_internal_errors(TRUE); 
$dom = new DOMDocument(); 
$dom->loadHTML($fragment); 
$xml = simplexml_import_dom($dom); 
libxml_use_internal_errors(FALSE); 

foreach($xml->xpath("//span[@class='subline']") as $item){ 
    echo (string)$item . PHP_EOL; 
} 

Diese class="subline" geht davon aus, so wird es mit mehreren Klassen scheitern. (Neu zu Xpath so Verbesserungen begrüßen.)

+0

Genau was ich brauchte, wusste nicht über diese DOMDocument-Klasse, danke! – Tomatrox