PHP - 删除特定标记之前和之后的内容

时间:2016-04-18 21:15:12

标签: php preg-replace str-replace

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

2 个答案:

答案 0 :(得分:0)

如果你没有正则表达式技能,你可以使用这样的爆炸功能来制作它;

<?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;

?>

答案 1 :(得分:0)

感谢您发布完整代码。由于您的内容中有html,因此需要稍微改变一下。

首先,因为您的内容包含/ char,我们需要将正则表达式分隔符更改为其他内容,以便它不会干扰。我把它改成了%。接下来,由于您使用的是多行字符串,我们需要在正则表达式上设置一个修饰符,以在。(点:所有字符)中包含换行符。通过在结束分隔符之后将“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 title =“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>