Php preg_match和ereg之间有什么区别?
我有一个php页面,它获取Php preg_match和ereg之间有什么区别?,php,regex,Php,Regex,我有一个php页面,它获取php\u info()并运行 ereg( '<body>(.*)</body>', $phpinfo, $regs ); 但现在每次我运行它时,服务器都会过载。它在regexr.com上运行,所以不应该有那么大的错误。 ereg和preg_match匹配之间有什么区别?如何在不炸毁服务器的情况下实现这一点 我想做的是有一个服务器页面,显示php\u info,但是有我的常规菜单和样式。任何替代方案也将不胜感激。不过,还是尽量远离我 谢谢 注:
php\u info()
并运行
ereg( '<body>(.*)</body>', $phpinfo, $regs );
但现在每次我运行它时,服务器都会过载。它在regexr.com上运行,所以不应该有那么大的错误。
ereg
和preg_match
匹配之间有什么区别?如何在不炸毁服务器的情况下实现这一点
我想做的是有一个服务器页面,显示php\u info
,但是有我的常规菜单和样式。任何替代方案也将不胜感激。不过,还是尽量远离我
谢谢
注:Regexr表示匹配长度为105563个字符您可以通过添加
s
(允许点元字符匹配换行符)来调整regex,如下所示:
preg_匹配('/.*/s',$phpinfo,$regs);
这将使您的输出位于$regs[0]
中,并且对于正则表达式来说应该尽可能快——显然这里没有太多的改进余地
如果正则表达式仍然太慢,那么性能更高的选项是使用
strpos
/strrpos
/substr
可以通过添加s
来调整正则表达式(这允许点元字符匹配换行符),如下所示:
preg_匹配('/.*/s',$phpinfo,$regs);
这将使您的输出位于$regs[0]
中,并且对于正则表达式来说应该尽可能快——显然这里没有太多的改进余地
如果正则表达式仍然太慢,那么性能更高的选项将是使用
strpos
/strpos
/substr
进行简单的字符串操作,正如Machavity建议的那样,您可能希望尝试将phpinfo
内容解析为DOM。您可以找到一个完整的示例,但这是一个简化的数据转储,您可以根据需要进行计算:
<?php
ob_start();
$exts = get_loaded_extensions();
phpinfo();
$phpinfo = ob_get_contents();
ob_end_clean();
//print_r($phpinfo);
$html_str = $phpinfo;
$html = new DOMDocument();
$html->loadHTML($html_str);
$html->preserveWhiteSpace = false;
$td = $html->getElementsByTagName('td');
echo "<pre>";
foreach ($td as $value) {
print_r($value);
}
?>
正如Machavity建议的那样,您可能希望尝试将
phpinfo
内容解析为DOM。您可以找到一个完整的示例,但这是一个简化的数据转储,您可以根据需要进行计算:
<?php
ob_start();
$exts = get_loaded_extensions();
phpinfo();
$phpinfo = ob_get_contents();
ob_end_clean();
//print_r($phpinfo);
$html_str = $phpinfo;
$html = new DOMDocument();
$html->loadHTML($html_str);
$html->preserveWhiteSpace = false;
$td = $html->getElementsByTagName('td');
echo "<pre>";
foreach ($td as $value) {
print_r($value);
}
?>
< /代码>是否考虑使用?开销更小,精度更高。这听起来是个不错的选择。我有$doc=newDOMDocument();$doc->loadHTML($phpinfo);$temp=$doc->getElementsByTagName('body');foreach($temp as$body){echo$body->nodeValue,PHP_EOL;}但它只是从标记中转储内容,而没有html格式。也尝试过保存HTML,但也没有运气。保留所有标记的正确输出方式是什么?不要试图将代码放入注释中。编辑你的问题,是否考虑使用?开销更小,精度更高。这听起来是个不错的选择。我有$doc=newDOMDocument();$doc->loadHTML($phpinfo);$temp=$doc->getElementsByTagName('body');foreach($temp as$body){echo$body->nodeValue,PHP_EOL;}但它只是从标记中转储内容,而没有html格式。也尝试过保存HTML,但也没有运气。保留所有标记的正确输出方式是什么?不要试图将代码放入注释中。编辑你的问题。问题是它去掉了标签,我想保留原始格式。问题是它去掉了标签,我想保留原始格式
<?php
ob_start();
$exts = get_loaded_extensions();
phpinfo();
$phpinfo = ob_get_contents();
ob_end_clean();
//print_r($phpinfo);
$html_str = $phpinfo;
$html = new DOMDocument();
$html->loadHTML($html_str);
$html->preserveWhiteSpace = false;
$td = $html->getElementsByTagName('td');
echo "<pre>";
foreach ($td as $value) {
print_r($value);
}
?>