Php preg_match和ereg之间有什么区别?

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页面,它获取
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);
    }
?>