【问题标题】:PHP - How to extract content from a div via RegexPHP - 如何通过正则表达式从 div 中提取内容
【发布时间】:2017-02-27 12:20:43
【问题描述】:

我有一个 HTML 字符串,其中存在一些继承的 div,我只需要提取顶级 div,例如-

$html= '<div class="test">
            <div>
                <div>Some text 1</div> 
                <div>Image content 2</div>
            </div>
            <div>
                <div>Some text 2</div> 
                <div>Image content 2</div>
            </div>
            ....
        </div>';
$regex ='/<div\sclass=[\"\']test[\"\']>.*?<\/div>/is';
preg_match($regex, $html, $matches);    

但真正的问题是结果只显示了第一个Some text 1&lt;/div&gt;,请帮我找出错误的地方?

我需要获取整个班级 test 'div' 作为结果匹配。

<div>
    <div>Some text 1</div> 
    <div>Image content 2</div>
</div>
<div>
     <div>Some text 2</div> 
     <div>Image content 2</div>
</div>

【问题讨论】:

  • 最佳实践是使用库解析 html 并提取您需要的内容。从官方文档中,尝试this
  • @DanIonescu,我正在使用 file_get_content,然后使用我想要获取这些表单的正则表达式。
  • 如果你坚持,试试正则表达式:
    ([\s\S]((.|\n)*))必要时

标签: php regex


【解决方案1】:

下面的 regex 应该这样做:

(?s)(?<=<div\sclass="test">\n).*(?=<\/div>)

demo / explanation

PHP

<?php
$regex = '/(?s)(?<=<div\sclass="test">\n).*(?=<\/div>)/';
$str = '<div class="test">
            <div>
                <div>Some text 1</div>
                <div>Image content 2</div>
            </div>
            <div>
                <div>Some text 2</div>
                <div>Image content 2</div>
            </div>
            ....
        </div>';
preg_match($regex, $str, $matches);
print_r($matches);
?>

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签