正则表达式 - 【PHP】用正则去获取html中的正文body内容,为什么取出来为空?【已解决】
怪我咯
怪我咯 2017-04-10 17:45:58
[PHP讨论组]

问题如题,先上html文件,需要取里面的body内容,直接上代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>你好你好</title>
  <link rel="stylesheet" href="css/normalize.css">
  <link rel="stylesheet" href="css/style.css" media="screen" type="text/css" />
</head>
<body>
  <p style="text-align:center;clear:both;">
    <script src="/follow.js" type="text/javascript"></script>
  </p>
  <p class='heart3d'>
    <p class='rib1'></p>
    <p class='rib2'></p>
    <p class='rib3'></p>
    <p class='rib4'></p>
  </p>
</body>
</html>

接着是php代码:

<?php
/**
 * 在html文件中找出正文
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2016/11/15
 * Time: 21:43
 */

$filename = '8/index.html';
$res = get_body_from_html($filename);
var_dump($res);


/**
 * 在html文件中找出正文
 * @param $filename  string 路径url
 * @return array|bool
 */
function get_body_from_html($filename)
{
    if (!file_exists($filename)) {
        return false;
    }

    $file = file_get_contents($filename);
    $res = array();
    preg_match('/<body>(.*)<\/body>/', $file, $res);
    return $res;
}

运行之后发现:

array(0) { } 

如果里面的方法改为:

function get_body_from_html($filename)
{
    if (!file_exists($filename)) {
        return false;
    }

//    $file = file_get_contents($filename);
    $file = '<html><head><title>你好</title>></head><body><p>我不好我不好</p></body></html>';
    $res = array();
    preg_match('/<body>(.*)<\/body>/', $file, $res);
    return $res;
}

运行之后就可以正确输出:

array(2) {
  [0]=>
  string(42) "<body><p>我不好我不好</p></body>"
  [1]=>
  string(29) "<p>我不好我不好</p>"
}

所以要请教一下为何写的正则抓不到内容呢?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
ringa_lee

@jsoncode 的答案有效, 但是后面的说明不对

'.'在默认情况下匹配的是除了换行符的所有字符, 而不是"所有非空字符"

解决方案有两种, 第一个正是 @jsoncode 提供的

([\s\S]*?)

第二种是给正则表达式添加模式修饰符 /s, 这样 . 就是匹配所有字符了

/<body>(.*)<\/body>/s

关于所有模式修饰符, 见 http://php.net/manual/zh/refe...

PHP中文网

把正则里面的

(.*)

改成

([\s\S]*?)

因为‘.’只能匹配所有非空字符(更正:点只能匹配除换行符rn之外的所有字符,而不是非空字符),而换行符,缩进,空格等空字符是匹配不到的

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号