如果内容匹配,则删除整个<li>元素

时间:2015-05-21 14:27:56

标签: php preg-replace

我在字符串中删除了html,只希望显示某些列表元素。例如,如果list元素包含单词'Banana',则从html中删除整行。

例如,在下面的块中,我将如何使用preg_replace或类似方法删除enitire

  • 元素?

    <ul>
      <li class="x">Apple - Green</li>
      <li class="x"><span>Orange</span> - Orange</li>
      <li id="active" class="x">Banana - Yellow</li>
      <li class="z"><span>Grapefruit</span> - Yellow</li>
    </ul>
    

    结束

    <ul>
      <li class="x">Apple - Green</li>
      <li class="x"><span>Orange</span> - Orange</li>
      <li class="z"><span>Grapefruit</span> - Yellow</li>
    </ul>
    

    请注意,class和span标签是动态的,可能会也可能不会出现。

    我想过使用preg_replace但我的技能只限于替换'Banana'这个词而是留下'Yellow'。我想删除整行。

  • 1 个答案:

    答案 0 :(得分:1)

    我的PHP特定语法有点生疏,但这个正则表达式可以工作:

    s/<li.*Banana.*?<\/li>//mg

    所以这应该这样做:

    $pattern = /<li.*Banana.*?<\/li>//mg;
    $no_potassium = preg_replace($pattern, '', $html);
    

    您还可以使用preg_splitpreg_grep来映射不包含Banana的数组:

    $lines = preg_grep($pattern, preg_split('/\r?\n/', $html), PREG_GREP_INVERT);
    

    这将带来额外的好处,没有多余的空白,而不是对HTML很重要。