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. 我仍然在输出中看到字符串“我不需要...”。我不需要那个字符串。我究竟做错了什么?
  2. 如何轻松删除所有其他 HTML 标记?

谢谢你的帮助。

-阿米特

4

2 回答 2

1

您正在匹配Server Versionuntil的所有内容MST。并且只有匹配的部分稍后会被 preg_replace 修改。正则表达式未涵盖的所有内容都保持不变。

因此,要替换第一个锚点之前的字符串部分以及后面的文本,您还必须先匹配它们。

= 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 回答