如何在PHP中删除自定义标签?

问题描述:

我想从字符串中删除以下标记。如何在PHP中删除自定义标签?

[caption id="attachment_9" align="alignleft" width="137" caption="test"][/caption] 

如何使用php的preg_replace删除它?

我尝试了几个正则表达式,但都失败了。

+0

你想用的ID删除所有[字幕] [/字幕]套,或者只是那些,对齐,宽度和字幕组? – 2010-07-09 02:40:32

+0

@Jamie Wong //我想删除所有标题集。 – Moon 2010-07-09 02:59:17

$output_string = preg_replace('#\[caption[^\]]*\](.*?)\[/caption\]#m', "$1", $input_string) 

,或者如果你也想删除的打开和关闭标签之间的任何东西,只是改变"$1"""

给你:

这里测试:http://www.pagecolumn.com/tool/pregtest.htm

<?php 
$ptn = "/\[caption.+caption\]/"; 
$str = "Otherstuff[caption id=\"attachment_9\" align=\"alignleft\" width=\"137\" caption=\"test\"][/caption]Something else"; 
$rpltxt = "@"; 
echo preg_replace($ptn, $rpltxt, $str); 
?> 
+1

-1这有两个主要问题。 1.因为你没有检查贪婪的条件而失败。 “你好[标题] [/标题]不在标题[标题] [/标题]世界”将被取代“helloworld”。 2.这不适用于跨越多行的字幕集。 “[caption] \ n [/ caption]”会失败。“作为另一个说明,您有一个未经转义的“内$ str,这意味着代码将不会运行。 – 2010-07-09 03:08:03

+0

我更正了项目2.一个疏忽,同时快速发布从该链接生成的代码关于项目1,你是绝对正确的。问题没有提供多少内容,我找到了一个快速解决方案,琥珀有更好的解决方案。 – mikegreenberg 2010-07-09 04:31:37