求助一个正则表达式

<html>
<head>
<meta charset="utf-8" >
<meta http-equiv="Cache-Control" content="no-cache"/>
<meta name="viewport" content="width=device-width,user-scalable=0,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>标题</title>
</head>
<body>
<div class="wrapper">
    <div class="inner" frag="面板1">
        <div class="read-info" frag="窗口1" portletmode="simpleArticleAttri">
            
                <article class="article" id="article-229286">
                    <header class="article-head">
                        <h1 class="article-title">
                            标题
                        </h1>
                        <p class="article-meta">
                            <span class="meta-time">2017-07-24</span><span class="meta-time">用户</span><span class="meta-time">浏览次数:</span><span class="meta-time"><span class="WP_VisitCount" url="/_visitcountdisplay?siteId=166&type=3&articleId=229286">12</span></span>
                        </p>
                    </header>
                    <div class="article-body">
                        <div class="article-content">
                            <P >要匹配出的内容<BR>123<BR>11</P>
                        </div>
                    </div>
                </article>
            
        </div>
    </div>
</div>
</body>
</html>

如上是需要匹配的原网页,想要匹配出下图红框所显示的内容 ,自己试了好几次都没成功,求大神帮忙!
clipboard.png

$url='....';
$data=file_get_contents($url);
$rule='#<div class="article-body">(.*?)</div>#';
preg_match_all($rule,$data,$match);
print_r($match);
阅读 3.8k
7 个回答

就你目前的dom结构,可以尝试使用我的正则表达式,如果结构多变或者出现其它情况,模式可能会无法使用。

$str = 你的字符串;
$reg = '/\<div class="article-body"\>[\s\S]*\<\/div\>(?=\s*\<\/article\>)/';
preg_match($reg, $str, $matches);
var_dump($matches);

输出:

array (size=1)
  0 => string '<div class="article-body">
                        <div class="article-content">
                            <P >要匹配出的内容<BR>123<BR>11</P>
                        </div>
                    </div>' (length=213)

仅供参考~

能否把你的问题描述清楚 可以直接画图描述问题吗? 没太懂你想做什么

匹配html的内容,最好不要用正则表达式,而是用其他工具

为啥不直接用选择器选dom

Xpath可以很方便解决.

对于HTML的文本格式,用正则不是最好的办法,这样的正则也很不好写,你可以把HTML的文本格式,想象成XML(或者处理成XML) ,这样会方便很多。

   $rule =  '/^\<div class="article-body"\>[\s\S]*\<\/div\>$/';
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题