2011-07-25 8 views
0

可能性の重複:
Best methods to parse HTML with PHPPHP、preg_matchはどのように使用しますか?

私は多くの時間が含まれているデータがあります。

<td width="183">//I want to find what's here</td> 

このtdは、私がどのように、このサイト内の各項目についてですそれぞれtdの内容を取得しますか?

+3

関連:[ベストの方法はPHPとHTMLを解析する]でもあります(http://stackoverflow.com/questions/3577641/best-methods-to-parse-html-with-php) –

答えて

3

あなたは、一般的に、すべてのHTML/XML解析のためのDOMDocumentを使用して最高のオフだ:

$doc = new DomDocument(); 
$doc->loadHTML('<html>...</html>'); 
foreach($dom->getElementsByTagName('td') as $node) 
{ 
    echo $node->nodeValue; 
} 

の幅= "183" で1つのTDを取得するには、その後、あなたがさてDOMXPathを使うことの最大

$xpath = new DOMXpath($dom); 

$elements = $xpath->query("*/td[@width='183']"); 

foreach($elements as $node) 
{ 
    echo $node->nodeValue; 
} 
+0

たくさんの 'td'が 'width'が '183'のものを正確に – user850019

+0

@user see update – cwallenpoole

+0

私は 'preg_match'を使って私に道を与えることはできません。 'preg_match'と一緒にいるので、あなたが私にコードを持ってきたら、これを通して私が学ぶほうがよいでしょう。 – user850019

1

を使用することができますpreg_matchとの併用でうまくいきません...

php > $xml = new SimpleXmlElement('<root><td width="183">A</td><td width="182">B</td><td width="181">C</td></root>'); 
php > foreach($xml->xpath('//td[@width=183]') as $td) echo (string)$td,"\n"; 
A 

などとよく似ています。

あなたは絶対にしなければならない場合、...:

php > preg_match_all('/<td width="183">(.*?)<\\/td>/', '<root><td width="183">A</td><td width="182">B</td><td width="181">C</td></root>', $matches); 
php > var_dump($matches); 
array(2) { 
    [0]=> 
    array(1) { 
    [0]=> 
    string(22) "<td width="183">A</td>" 
    } 
    [1]=> 
    array(1) { 
    [0]=> 
    string(1) "A" 
    } 
} 

とにかく...私は正規表現のアプローチが簡単に壊れて、推奨されていないことを、あなたに言いました。

EDIT:最初からわからない "183のみ"部分を修正しました。

+1

loadHTMLメソッドを持つDOMと異なり、SimpleXMLは有効なXHTMLでないと失敗します – Gordon

1

使用preg_match_all()この例をチェック:

<?php 
// The \\2 is an example of backreferencing. This tells pcre that 
// it must match the second set of parentheses in the regular expression 
// itself, which would be the ([\w]+) in this case. The extra backslash is 
// required because the string is in double quotes. 
$html = "<b>bold text</b><a href=howdy.html>click me</a>"; 

preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $html, $matches, PREG_SET_ORDER); 

foreach ($matches as $val) { 
    echo "matched: " . $val[0] . "\n"; 
    echo "part 1: " . $val[1] . "\n"; 
    echo "part 2: " . $val[2] . "\n"; 
    echo "part 3: " . $val[3] . "\n"; 
    echo "part 4: " . $val[4] . "\n\n"; 
} 
?> 

上記の例は、出力されます。

が一致:太字
パート1:<b>
パート2:
B パート3:太字のテキスト
パート4:</b>

マッチ:<a href=howdy.html>
パート2:
その3:
パート4私をクリックしてください:あなたは、エコー$ valを$ことができたよう</a>

[3]を取得するに
パート1に私をクリックしてくださいhtmlタグの中身は何ですか?私はこのリンクから例を得ました。

http://www.php.net/manual/en/function.preg-match-all.php

関連する問題