1

HTTPドキュメントを解析してドキュメントの一部を抽出しようとしていますが、目的の結果を得ることができません。これが私が持っているものです:

<?php

// a sample of HTTP document that I am trying to parse
$http_response = <<<'EOT'
<dl><dt>Server Version: Apache</dt>
<dt>Server Built: Apr  4 2010 17:19:54
</dt></dl><hr /><dl>
<dt>Current Time: Wednesday, 10-Oct-2012 06:14:05 MST</dt>
</dl>
I do not need anything below this, including this line itself
......
EOT;

echo $http_response;
echo '********************';
$count = -1;
$a = preg_replace("/(Server Version)([\s\S]*?)(MST)/", "$1$2$3", $http_response, -1, $count);
echo "<br> count: $count" . '<br>';
echo $a;
  1. 出力に「Inneet...」という文字列が表示されます。その文字列は必要ありません。私は何が間違っているのですか?
  2. 他のすべてのHTMLタグも簡単に削除するにはどうすればよいですか?

ご協力いただきありがとうございます。

-アミット

4

2 に答える 2

1

あなたはからまですべてを一致させています。そして、一致した部分のみが後でpreg_replaceによって変更されます。正規表現でカバーされていないものはすべて手つかずのままです。Server VersionMST

したがって、最初のアンカーの前の文字列部分とそれに続くテキストを置き換えるには、それらも最初に一致させる必要があります。

= preg_replace("/^.*(Server Version)(.*?)(MST).*$/s", "$1$2$3",

^.*およびを参照してください.*$。両方が一致しますが、置換パターンには記載されていません。だから彼らは落とされます。

もちろん、そのような場合に使用する方が簡単かもしれませんpreg_match()...

于 2012-10-10T13:51:47.603 に答える
0

次のように、正規表現の後/前に他のキャラクターをキャプチャする必要があります。

/.+?(Server Version)([\s\S]*?)(MST).+?/s

's'は、pregに複数の行に一致するように指示するフラグです。必要になります。

htmlタグを削除するには、strip_tagsを使用します。

于 2012-10-10T13:53:18.527 に答える