Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换html内容的php正则表达式_Php_Regex - Fatal编程技术网

替换html内容的php正则表达式

替换html内容的php正则表达式,php,regex,Php,Regex,我正在使用这个html代码 <ul class="nav_1"> <li> <a href="#">Home</a> <ul class="submenu_nav_1"> <li> <a href="#">Home</a> <ul class="submenu_nav_

我正在使用这个html代码

<ul class="nav_1">
    <li>
        <a href="#">Home</a>
        <ul class="submenu_nav_1">
            <li>
                <a href="#">Home</a>
                <ul class="submenu_nav_1_1">
                    <li><a href="#">Home</a></li>
                    <li><a href="#">Menu Item 1</a></li>
                </ul>
            </li>
            <li><a href="#">Menu Item 1</a></li>
        </ul>
    </li>
    <li><a href="#">Menu Item 1</a></li>
    <li><a href="#">Menu Item 2</a></li>
</ul>

<ul class="nav_2">
    <li><a href="#">Home</a></li>
    <li><a href="#">Menu Item 1</a></li>
    <li><a href="#">Menu Item 2</a></li>
</ul>
我想使用php正则表达式在
    中添加此html代码
  • 文本 因此,结果必须是:

    <ul class="nav_1">
        <li>Text</li>
    </ul>
    
    <ul class="nav_2">
        <li><a href="#">Home</a></li>
        <li><a href="#">Menu Item 1</a></li>
        <li><a href="#">Menu Item 2</a></li>
    </ul>
    
    • 正文
    但当我尝试这段php代码时:

    <?php
        $html  = preg_replace('/(.*?<ul[^>]*?class=[\"|\']nav_1[\"|\'][^>]*>).*(<\/ul>.*)/s','$1'.PHP_EOL.'<li>Text</li>'.PHP_EOL.'$2',$html);
        echo $html;
    ?>
    
    
    
    但此代码返回:

    <ul class="nav_1">
         <li>Text</li>
    </ul>
    
    • 正文

    到目前为止,实现所需的最简单方法是使用JQUERY

    $(".nav_1").html("<li>Text</li>");
    
    $(“.nav_1”).html(“
  • Text
  • ”);
    这是一个JSFIDLE


    正如其他人所说,用正则表达式解析和操作HTML虽然可能,但却是一个巨大的难题

    另一种方法是使用本机库。做一些小动作很简单:

    $html = <<<HTML
    <ul class="nav_1">
        <li>
            <a href="#">Home</a>
            <ul class="submenu_nav_1">
                <li>
                    <a href="#">Home</a>
                    <ul class="submenu_nav_1_1">
                        <li><a href="#">Home</a></li>
                        <li><a href="#">Menu Item 1</a></li>
                    </ul>
                </li>
                <li><a href="#">Menu Item 1</a></li>
            </ul>
        </li>
        <li><a href="#">Menu Item 1</a></li>
        <li><a href="#">Menu Item 2</a></li>
    </ul>
    
    <ul class="nav_2">
        <li><a href="#">Home</a></li>
        <li><a href="#">Menu Item 1</a></li>
        <li><a href="#">Menu Item 2</a></li>
    </ul>
    HTML;
    
    // Load original HTML
    $dom = new DOMDocument();
    $dom->loadHTML($html);
    
    // Find any <ul> with the class "nav_1"
    $pathSearch = new DOMXPath($dom);
    $ul = $pathSearch->query('//ul[@class="nav_1"]')->item(0);
    
    // Remove the <ul>'s content
    while ($ul->hasChildNodes()) {
        $ul->removeChild($ul->firstChild);
    }
    
    // Add a new <li> child element with the content "Text"
    $ul->appendChild($dom->createElement('li', 'Text'));
    
    echo $dom->saveHTML();
    
    $html=项目(0);
    //删除
      的内容 而($ul->hasChildNodes()){ $ul->removeChild($ul->firstChild); } //添加内容为“Text”的新
    • 子元素 $ul->appendChild($dom->createElement('li','Text')); echo$dom->saveHTML();

    您可能需要根据类结构调整XPath查询。提供了一些其他选项。

    通过使用,您可能会有更多的运气(以及总体易用性)。这称为解析。不要使用正则表达式解析HTML文档。改用DOM解析器。我建议找到一种不用正则表达式的方法使用parserI需要使用php而不是jquery获得上面列出的结果。您能解释一下原因吗?它需要是动态的吗?这就是你为什么要使用正则表达式的原因吗?