PHP - 如何通过正则表达式从{div}

时间:2017-02-27 12:20:44

标签: php regex

我有一个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</div>,请帮我弄清楚我犯了哪些错误?

我需要抓住整个班级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>

1 个答案:

答案 0 :(得分:0)

以下 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);
?>