0

私は正規表現を初めて使用しますが、まだコツをつかんでいません。

CURL と PHP を使用して、特定の Web ページから HTML コンテンツを取得しました。このウェブページの構造は決して変わりません。ページの結果は検索機能に依存しますが、html タグは常に同じです。入力された検索語に応じて、ページから結果データを取得する必要があります。

必要なデータは次のとおりです。

<h1 class="location_only">(555) 555-5555 is a Landline</h1>

だから私はその間にあるものをつかむ必要があります

<h1 class="location_only"></h1>

結果の HTML である がある場合$data、それを正規表現に入れ、見つけたデータを としてエコーするにはどうすればよい$resultですか?

4

5 に答える 5

2

HTML の解析に正規表現を使用しないでください。

Simple HTML DOM Parserなどの HTML パーサーを使用してください。あなたの問題は局所的に見えるかもしれませんが、そうではありません。たとえそうであったとしても、このタイプの問題は後日範囲が拡大する可能性が非常に高く、正規表現で動作させることができたとしても、大きな頭痛の種になります。

于 2012-04-23T16:16:22.570 に答える
1

次の検索パターンを使用して、タグ間のテキストを選択できます。

<span id="result1">(.*?)</span>

キャプチャ グループは、コードが<span id="result1">(555) 555-5555 is a Landline</span>.

結果をエコーする方法の詳細については、preg_match()を参照してください。

他の人が提案したような HTML DOM Parser も調べてください。全然答えなくて良かったかも…

于 2012-04-23T16:20:32.467 に答える
0

HTML を解析するために正規表現を使用しないように十分に注意されています。したがって、値を抽出するためのDOMパーサーベースのコードは次のとおりです。

$html = <<< EOF
<html>
<head>
<title>Some Title</title>
</head>
<body>
<H1 class="location_only">(555) 555-5555 is a Landline</H1>
</body>
</html>
EOF;
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html); // loads your html
$xpath = new DOMXPath($doc);
$value = $xpath->evaluate("string(//h1[@class='location_only']/text())"); 
echo "Your H1 Value=[$value]\n"; // prints text between <h1> and </h1>

出力:

Your H1 Value=[(555) 555-5555 is a Landline]
于 2012-04-23T17:08:01.413 に答える
0

正規表現を使用して HTML から情報を確実に抽出することはできません。ただし、DOMDocument::LoadHTMLなどの HTML パーサーを使用することはできます。これにより、文字列から HTML が取得され、getElementByIdgetElementByTagNameなどの関数を使用して値を見つけることができます。他の HTML パーサーもあります。

于 2012-04-23T16:15:21.123 に答える
0

正規表現ではなく代わりに DOM パーサーを使用するという 2 つの回答はどちらも正しいですが、ページの構造が変わらない場合は、開始位置が適切に設定されていれば、クイック & ダーティな正規表現で問題なく動作します。そして参考までに終点。

于 2012-04-23T16:17:52.793 に答える