3

curl で取得した次の html タグの内容を正規表現で解析したかったのです。

<span class='ui-allscores'>IND - 203/9 (49.4 Ovs)</span>

出力が になるようにします"IND - 203/9 (49.4 Ovs)"

次のコードを書きましたが、機能しません。

$one="<span class='ui-allscores'>IND - 203/9 (49.4 Ovs)</span>";
$five="~(?<=<span class='ui-allscores'>)[.]*(?=</br></span>)~";
preg_match_all($five,$one,$ui);
print_r($ui);
4

3 に答える 3

7

これを試してください:

$string = "<span class='ui-allscores'>IND - 203/9 (49.4 Ovs)</span>";

ダイナミック スパン タグ:

preg_match('/<span[^>]*>(.*?)<\/span>/si', $string, $matches);

特定のスパン タグ:

preg_match("/<span class='ui-allscores'>(.*?)<\/span>/si", $string, $matches);

// Output
array (size=2)
  0 => string '<span class='ui-allscores'>IND - 203/9 (49.4 Ovs)</span>' (length=56)
  1 => string 'IND - 203/9 (49.4 Ovs)' (length=22)
于 2013-07-24T06:07:43.827 に答える
1

単純に HTML タグを削除したい場合は、php 組み込み関数strip_tagsを使用して html タグを削除します。

HTMLタグの削除に関する別の回答許可されているものを除いて、すべてのHTMLタグを削除します

于 2013-07-24T06:09:31.440 に答える
1

あなたの正規表現の問題はその[.]部分です。.ドットは文字クラス内に記述されているため、これはリテラルのみに一致します。したがって、角括弧を削除するだけです。

 $five="~(?<=<span class='ui-allscores'>).*(?=</br></span>)~";

次の問題は、 の貪欲さです*。このマッチング動作は、?ビハインドを配置することで変更できます。

$five="~(?<=<span class='ui-allscores'>).*?(?=</br></span>)~";

しかし、全体的なポイントは次のとおりです。おそらく、この仕事には html パーサーを使用する必要があります。

PHP で HTML/XML を解析および処理する方法を参照してください。

于 2013-07-24T06:12:05.967 に答える