2010-07-09 62 views
0

我想從字符串中刪除以下標記。如何在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

回答

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

,或者如果你也想刪除的打開和關閉標籤之間的任何東西,只是改變"$1"""

0

給你:

這裏測試: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