PHP - 使用正则表达式</div> </ul>将<ul>括在<div>标签中

时间:2014-01-17 05:46:09

标签: php html regex

我有一个像下面这样的html字符串。

<ul style="margin-left: 240px;">
    <li>One</li>
    <li>Three
        <ul>
            <li>dfdf</li>
        </ul>
    </li>
    <li>dfds</li>
</ul>

我想将<ul>标记与样式为<div>

<ul>括起来
<div style="margin-left: 240px;">
    <ul>
        <li>One</li>
        <li>Three
            <ul>
                <li>dfdf</li>
            </ul>
        </li>
        <li>dfds</li>
    </ul>
</div>

我尝试过关注regex,但它不适用于嵌套的<ul>

$html = preg_replace('/<ul(.*?)>(.*?)<\/ul>/s', '<div $1><ul>$2</ul></div>', $html);

找到第一个<ul>开放和第二个</ul>关闭之间的字符串。我将在同一个字符串中有多个<ul>结构

请帮我写一下正确的正则表达式。

2 个答案:

答案 0 :(得分:1)

正则表达式不够严格,无法处理嵌套。相反,尝试使用适当的XML或HTML解析器,操作解析后的结构,并将其渲染回字符串。

答案 1 :(得分:0)

试试这个:

$html = preg_replace('/<ul (.*?)>(.+)</ul>/gs', '<div $1><ul>$2</ul></div>', $html);