0

重複の可能性:
PHPでHTMLを解析および処理する方法は?

いくつかのhtmlから値を抽出しようとしています。これが私が値を取得しようとしているHTMLドキュメントの一部です。

    <input type="hidden" id="first"
        value='&euro;218.33' />
    <input type="hidden" id="second"
        value='&euro;291.08' />
    <input type="hidden" id="third"
        value='&euro;344.77' />

次のpregmatchallコマンドを使用しました。ここで、$ bufferには、検索しているページのhtml全体が含まれています。

if (preg_match_all('/<input type="hidden" id="(.+?)" value=\'&euro;(.+?)\'/', $buffer, $matches))
{
   echo "FOUND";
   echo  $matches[2][0] . " " . $matches[2][1] . " " . $matches[2][2] . "\n";
} 

このpregmatchコマンドは、一致するものを検出していません。助言がありますか?

4

3 に答える 3

2

非常に簡単な解決策は、PHP Simple HTML DOM Parser str_get_htmlを使用することです

HTMLの例

include "simple_html_dom.php" ;

$html =" <input type=\"hidden\" id=\"first\"
    value='&euro;218.33' />
<input type=\"hidden\" id=\"second\"
    value='&euro;291.08' />
<input type=\"hidden\" id=\"third\"
    value='&euro;344.77' />";

使用法

$html = str_get_html($html);
foreach($html->find('input') as $element)
    echo $element->value . '\n';

出力

€218.33
€291.08
€344.77
于 2012-09-04T10:23:16.857 に答える
1

IDと値の間に複数のスペースがあるため、この正規表現は何も返しません...

preg_match_all('/<input type="hidden" id="(.+?)"[.\s\t\r\n\v\f]*?value=\'&euro;(.+?)\'/', $buffer, $matches)

[。\s\ t \ r \ n \ v \ f] *に注意してください?value=の直前。これは、idの終了後、value="の前のすべての文字を取ります。このように、スペース、タブ、改行などが表現を壊すことはありません。

于 2012-09-04T10:29:49.993 に答える
0

どうですか

if (preg_match_all('/<input type="hidden" id="(.+?)".+?value=\'&euro;(.+?)\'/s', $buffer, $matches))
于 2012-09-04T10:29:46.347 に答える