【问题标题】:Replace UL tags with specific class用特定类别替换 UL 标签
【发布时间】:2010-09-27 13:41:02
【问题描述】:

我正在尝试将所有 ul 标记替换为 level0 类,如下所示:

<ul>
    <li>Test
         <ul class="level0">
           ...
         </ul>
     </li>
</ul>

将被处理为

<ul>
    <li>Test</li>
</ul>

我试过了

$_menu = preg_replace('/<ul class="level0">(.*)<\/ul>/iU', "", $_menu); 

但它不起作用,帮助?

谢谢。

是啊

【问题讨论】:

标签: php regex preg-replace


【解决方案1】:

我确定这是重复的,但无论如何,这里是使用 DOM 的方法

$dom = new DOMDocument;                          // init new DOMDocument
$dom->loadHTML($html);                           // load HTML into it
$xpath = new DOMXPath($dom);                     // create a new XPath
$nodes = $xpath->query('//ul[@class="level0"]'); // Find all UL with class
foreach($nodes as $node) {                       // Iterate over found elements
    $node->parentNode->removeChild($node);       // Remove UL Element
}
echo $dom->saveHTML();                           // output cleaned HTML

【讨论】:

  • +1,如果您的类属性可以包含多个类,请使用//ul[contains(@class,'level0')](尽管在prefixlevel0level0suffix 上仍然会中断)。
【解决方案2】:

尝试 /mis 而不是 /iU

【讨论】:

  • 如果你使用 /mis 而不是 /iU 它“有效”,但它也仍然会削减 ul 元素之后的所有内容,因为“你”告诉他接受任何东西 (.*)。跨度>
  • 当然可以,因为你让他这么做……把 (.*) 改成 (.*?)
【解决方案3】:

您的代码工作正常 - 只是您将 $_menu 作为包含字符的字符串传递,而不是您正在执行 preg_replace 的字符,尽管它在视觉上看起来不错。该字符串还包含制表符、分隔符和空格——RegEx 不会寻找这些。您可以使用以下方法解决此问题:

(例如)

$_menu='<ul>
    <li>Test
         <ul class="level0">
           ...
         </ul>
     </li>
</ul>
';


$breaks = array("
", "\n", "\r", "chr(13)", "\t", "\0", "\x0B");
$_menu=str_replace($breaks,"",$_menu);

$_menu = preg_replace('/<ul class="level0">(.*)<\/ul>/iU', "", $_menu); 

【讨论】:

    【解决方案4】:

    试试

    $str ='<ul>
        <li>Test
             <ul class="level0">
              tsts
             </ul>
         </li>
    </ul>
    ';
    //echo '<pre>';
    $str = preg_replace(array("/(\s\/\/.*\\n)/","/(\\t|\\r|\\n)/",'/<!--(.*)-->/Uis','/>\\s+</'),array("","","",'><'),$str);
    echo preg_replace('/<ul class="level0">(.*)<\/li>/',"</li>",trim($str));
    

    【讨论】:

      猜你喜欢
      • 2012-03-13
      • 2013-11-23
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 2022-12-17
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多