删除其他标签之间的标签

时间:2018-02-08 17:13:58

标签: php regex

如何删除文本上Tag / bloquote和/ figure之间的TAG / div? 我尝试使用str_replace,但它不起作用。

$content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam mi augue, molestie sed scelerisque ut, sodales id sapien. Suspendisse potenti. Nam a lacinia orci. Maecenas justo erat, condimentum vel tincidunt id, elementum a turpis. Sed pretium libero a consectetur imperdiet. Duis dignissim at arcu id porta. Phasellus eu nunc elementum, bibendum ex ut, mollis nulla. Cras ullamcorper mollis massa eget ornare. Donec id tortor vitae arcu ullamcorper placerat. <p> <blockquote>Citação etc e tal, modelo teste 123 (Diego)</blockquote> </div> </figure></p> Integer aliquet luctus imperdiet. Nullam tincidunt justo ex, a ultricies elit placerat non. Nullam fringilla dolor vitae metus consequat, ac molestie eros porttitor.";

$content = str_replace('</blockquote>(.*)</figure>','</blockquote></figure>', $content);

1 个答案:

答案 0 :(得分:0)

使用preg_replace而不是str_replace。此外,preg_replace需要不同的语法,正确的分隔符,并将表达式作为“组”进行替换。

尝试这种方法:

$content = preg_replace('^(.*)(</blockquote>)(.*)(</div>)(.*)(</figure>)(.*)^s', '$1$2$3$5$6$7', $content);

重新排列和适应其他场景应该相当容易,并且会删除/ blockquote和/ figure之间的/ div。按顺序,括号中的每个组对应于第二个参数中的一个编号变量。 ^是一个dilemeter,如果它在正则表达式中的任何其他位置使用,您将需要更改。最后一个^之后的's'是'dotall'可选修饰符,如果它们出现,它们将允许匹配换行符。 $ 3和$ 5变量可能包含在某些情况下您希望保留的部分。请注意,$ 4变量被排除在第二个参数之外,因为它包含&lt; / div&gt;标签

此外,

$content = preg_replace('^(.*)(</figure>)(.*)(</p>)(.*)^s', '$1$2$3$5', $content);

...将在您在评论中提到的/ figure之后删除/ p。 此策略的变化应适用于大多数类似的情况。