2011-12-20 3 views
0

複数の順序付けられていないリストがあるページがある場合、単一のPHPの正規表現を使用して要素を抽出する方法は?PHPの正規表現を使用して特定のHTMLの順序付けられていないリストの項目を一致させる

<html> 
<head> 
<title>A title</title> 
</head> 
<body> 

<ul id="list1"> 
<li>Item 1</li> 
<li>Item 2</li> 
</ul> 

<ul id="list2"> 
<li>Item 3</li> 
<li>Item 4</li> 
</ul> 

</body> 
</html> 

文字列「アイテム3」と「アイテム4」はどのように抽出されますか? <ul>.*?</ul>ようなものを、その後、様々な<li> Sの内容を抽出する第二の正規表現を適用 - - preg_match_all()<li>.*?</li>ようなものを一つは第list2内のすべてのテキストを抽出した場合

ソリューションは簡単であろう。あるいは、DOMを使用することもできます。

しかし、学習目的のためには、これが単一の正規表現でどのようになるか興味があります。

+0

正規表現でこれを行うことから学ぶことは、正規表現ではこれを行うことではありません。 – lonesomeday

+0

http://simplehtmldom.sourceforge.net/のようなツールを使用できます – dm03514

答えて

0

regexはHTMLファイルを解析するのに適していないため、これに対する最善の解決策はDOM解析ツールを使用します。

<? 

$dom = new DOMDocument; 
$dom->loadHTML($html); 

$xpath = new DOMXPath($dom); 

$lis = $xpath->query('//ul[@id="list2"]/li'); 

$text = array(); 

foreach ($lis as $li) { 
    $text[] = $li->nodeValue; 
} 

var_export($text); 

/* 
array (
    0 => 'Item 3', 
    1 => 'Item 4', 
) 
*/ 
関連する問題