我在字符串中删除了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'。我想删除整行。
答案 0 :(得分:1)
我的PHP特定语法有点生疏,但这个正则表达式可以工作:
s/<li.*Banana.*?<\/li>//mg
所以这应该这样做:
$pattern = /<li.*Banana.*?<\/li>//mg;
$no_potassium = preg_replace($pattern, '', $html);
您还可以使用preg_split
和preg_grep
来映射不包含Banana的数组:
$lines = preg_grep($pattern, preg_split('/\r?\n/', $html), PREG_GREP_INVERT);
这将带来额外的好处,没有多余的空白,而不是对HTML很重要。