可能性の重複:
Best methods to parse HTML with PHPPHP、preg_matchはどのように使用しますか?
私は多くの時間が含まれているデータがあります。
<td width="183">//I want to find what's here</td>
このtd
は、私がどのように、このサイト内の各項目についてですそれぞれtd
の内容を取得しますか?
可能性の重複:
Best methods to parse HTML with PHPPHP、preg_matchはどのように使用しますか?
私は多くの時間が含まれているデータがあります。
<td width="183">//I want to find what's here</td>
このtd
は、私がどのように、このサイト内の各項目についてですそれぞれtd
の内容を取得しますか?
あなたは、一般的に、すべての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;
}
たくさんの 'td'が 'width'が '183'のものを正確に – user850019
@user see update – cwallenpoole
私は 'preg_match'を使って私に道を与えることはできません。 'preg_match'と一緒にいるので、あなたが私にコードを持ってきたら、これを通して私が学ぶほうがよいでしょう。 – user850019
を使用することができます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のみ"部分を修正しました。
loadHTMLメソッドを持つDOMと異なり、SimpleXMLは有効なXHTMLでないと失敗します – Gordon
使用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タグの中身は何ですか?私はこのリンクから例を得ました。
関連:[ベストの方法はPHPとHTMLを解析する]でもあります(http://stackoverflow.com/questions/3577641/best-methods-to-parse-html-with-php) –