PHP - 删除特定标签前后的内容

PHP - delete content after and before specific tag

我需要删除它们之间的特定标签和文本。对于标签,我可以使用 str_replace,但对于我尝试使用 preg_replace 之间的文本,但没有任何效果。

要修复的代码:

// ...
[tabs_item title=”My title”] some different text here... [/tabs_item]
[tabs_item title=”My Other title”] some different text here... [/tabs_item]
// ...

我的代码:

$pattern = "/[tabs_item[^>]*title=\"my txt\"](.*?)[\/tabs_item]/si";
$replacement = '';
$fix1 = preg_replace($pattern, $replacement, $content2);

$search  = array('[/tabs_item]');
$replace = array('');
$fix2 = str_replace($search, $replace, $fix1);

return $fix2;

如果你没有正则表达式技能,你可以用这样的爆炸函数来做这个;

<?php

$var = '// something
[tabs_item title=”My title”] some different text here... [/tabs_item]
[tabs_item title=”My Other title”] some different text here... [/tabs_item]
// something';

$first = explode('[tabs_item title=”My title”]',$var);
$start = $first[0];
$last = explode('[/tabs_item]',$first[1]);
$end = $last[count($last)-1];
echo $start.$end;

?>

感谢您发布完整代码。由于您的内容中有 html,因此需要稍微不同地处理。

首先,由于您的内容包含 / 字符,我们需要将正则表达式分隔符更改为其他内容,以免造成干扰。我把它改成了%。接下来,由于您使用的是 multi-line 字符串,我们需要在正则表达式上设置修饰符以在 .(点:所有字符)中包含换行符。通过将 's' 添加到结束定界符后的模式末尾来添加此修饰符。

此代码已经过测试并适用于我。

$content = '
   <p>[tabs] [tabs_item title="Description"]<br />
    Lorem ipsum dolor sit amet</p>
    <p>Lorem ipsum dolor sit amet<br />
    Lorem ipsum dolor sit amet<br />
    Lorem ipsum dolor sit amet</p>
   <p>[/tabs_item] [tabs_item title="Zwroty"]</p>
   <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce nec mauris nunc. Vestibulum elit urna, aliquet et urna et, sagittis blandit ligula.</p>
   [/tabs_item]
   <p>[tabs_item title="Peyment and shipping"]</p>
   <p>Lorem ipsum dolor sit amet</p>
   <p><b>Lorem ipsum dolor sit amet</b>Lorem ipsum dolor sit amet</p>
   <p>Lorem ipsum dolor sit amet</p>
   <p>Lorem ipsum dolor sit amet</p>
   <p>Lorem ipsum dolor sit amet</p>
   <p>Lorem ipsum dolor sit amet " <a href="#" target="_blank">url</a>"</p>
   <p>[/tabs_item]</p>
   <p>[/tabs]</p>';

$pattern = "%\[tabs_item[^\[]+\[/tabs_item\]%s";
$replacement = '';
$out = preg_replace($pattern, $replacement, $content);

echo $out;

结果:

<p>[tabs]  
   <p></p>
   <p>[/tabs]</p>

回答你的后续问题:如果你只想删除这个标签:

[tabs_item 标题="Peyment and shipping"]...[/tabs_item]

您可以将图案更改为:

$pattern = '%\[tabs_item title="Peyment and shipping"\][^\[]+\[/tabs_item\]%s';

这导致:

<p>[tabs] [tabs_item title="Description"]<br />
    Lorem ipsum dolor sit amet</p>
    <p>Lorem ipsum dolor sit amet<br />
    Lorem ipsum dolor sit amet<br />
    Lorem ipsum dolor sit amet</p>
   <p>[/tabs_item] [tabs_item title="Zwroty"]</p>
   <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce nec mauris nunc. Vestibulum elit urna, aliquet et urna et, sagittis blandit ligula.</p>
   [/tabs_item]
   <p></p>
   <p>[/tabs]</p>