1

私はこのようなhtmlを持っています:

......whatever very long html.....

<span class="title">hello world!</span>

......whatever very long html......

これは非常に長い html であり、「hello world!」というコンテンツのみが必要です。このhtmlから、このhtmlを取得しました

$result = file_get_contents($url , false, $context);

多くの人がシンプルな HTML DOM パーサーを使用していましたが、この場合は正規表現を使用した方が効率的だと思います。

どうすればいいですか?助言がありますか?どんな助けでも本当に素晴らしいでしょう。

前もって感謝します!

4

2 に答える 2

2

DOM パーサーに固執してください - その方が良いです。そうは言っても、このようなREGEXを使用できます...

// where the html is stored in `$html`
preg_match('/<span class="title">(.+?)<\/span>/', $html, $m);
$whatYouWant = $m[1];

preg_match()正規表現の括弧内にキャプチャされたすべての要素の配列と、キャプチャされた文字列全体である 0 番目の要素を格納します。この場合、正規表現は非常に単純で、スパン タグの終了スラッシュがエスケープされているため、必要なものにほぼ直接文字列が一致します。キャプチャされた部分は、任意の文字 ( .) を 1 回以上 ( +) 貪欲に ( ?) 意味するだけです。

于 2012-08-07T09:39:00.800 に答える
0

いいえ、正規表現や同様の機能がより効果的または簡単になるとは本当に思いません。

SimpleHTML DOMを使用すると、探しているデータを次のようにすばやく取得できます。

//Get your file
$html = file_get_html('myfile.html');
//Use jQuery style selectors
$spanValue = $html->find('span.title')->plaintext;

echo($spanValue);

preg_match を使用すると、次のように実行できます。

preg_match("/<span class=\"title\">([^`]*?)<\/span>/", $data, $matches);

または、クラス「タイトル」のスパンが複数ある場合は、次のようになります。

preg_match_all("/<span class=\"title\">([^`]*?)<\/span>/", $data, $matches);
于 2012-08-07T09:43:03.907 に答える