2010-12-29 9 views
2

私は英語をうまく話せません。だから、もし私が間違いを犯すなら、ごめんなさい。RegExp PHPは複数のスパンタグ間でテキストを取得します

私はゲームに関するいくつかの情報を持つのdivボックス持たサイトで

:私は<span class="noteline">間で情報を取得する必要があり、上記の溶液が正常に動作します</span>

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

タグを閉じます

<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> 

をそれは "gameloft"というテキストの "subline"しか得られません。

しかし、私はテキストがレーシング/アーケードと2010年を持っている必要があります。

これは(動作しない)かもしれません。このような

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); 

何か..とにかく

。助けてくれてありがとう。

答えて

0

はこれを試してみてください:

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

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

私は上記のコードをこのように試してみました:

<?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); 

?> 

私が得た出力は、このでした:

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

ありがとうございました。それは素晴らしい解決策であるようです。 – Andy

1

正規表現の代わりにするだろうphpQueryまたはQueryPathを使用します。簡略化すると、

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

正規表現はHTMLを解析するのには適していません。彼らは権利を得るのが難しく、彼らは常に端の場合に壊れます。

もっと簡単な方法があるかどうかはわからないが、これはあなたが記述マークアップで動作するはずです:

<?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; 
} 

これはclass="subline"を前提としていますので、複数のクラスで失敗します。 (Xpathの新機能ですので、改善が歓迎されています)

+0

ちょうど私が必要だった、DOMDocumentクラスについては知りませんでした、ありがとう! – Tomatrox

関連する問題