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>
我需要删除它们之间的特定标签和文本。对于标签,我可以使用 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>