2011-05-06 95 views
0

我真的需要preg_replace的幫助。請看下圖:Preg替換問題(PHP)

<html>[sourcecode language='php']<?php echo "hello world"; ?>[/sourcecode]</html> 

我只希望它顯示的PHP標籤和剝離出來休息,所以我會得到以下結果:

<?php echo "hello world"; ?> 

請幫助。我曾嘗試以下方法:

$update = get_the_content(); 

$patterns = array(); 
$patterns[0] = '/<html>/'; 
$patterns[1] = '/</html>/'; 
$patterns[2] = '/[sourcecode language]/'; 
$patterns[3] = '/[/sourcecode]/'; 
$replacements = array(); 
$replacements[0] = ''; 
$replacements[1] = ''; 
$replacements[2] = ''; 
$replacements[3] = ''; 

echo preg_replace($patterns, $replacements, $update); 

但它不起作用。我的問題也是語言可能並不總是PHP。

回答

1

您需要使用/作爲分隔符和[]當逃脫字符一樣/因爲他們在使用正則表達式:

$update = get_the_content(); 

$patterns = array(); 
$patterns[0] = '/<html>/'; 
$patterns[1] = '/<\/html>/'; 
$patterns[2] = '/\[sourcecode language\]/'; 
$patterns[3] = '/\[\/sourcecode\]/'; 
$replacements = array(); 
$replacements[0] = ''; 
$replacements[1] = ''; 
$replacements[2] = ''; 
$replacements[3] = ''; 

echo preg_replace($patterns, $replacements, $update); 
0

讓您遠離方括號。在正則表達式中,[]是表示字符類的標籤,並且該模式與括號內的任何一個字符相匹配。

0

何嘗不是一種不同的方法:

得到所有PHP的標籤和內容

$src = get_the_content(); 
$matches = array(); 
preg_match_all('/(<\?php(?:.*)\?>)/i',$src,$matches); 
echo implode("\n",$matches); 

或獲取塊[源代碼]的所有內容

$src = get_the_content(); 
$matches = array(); 
preg_match_all('/\[sourcecode[^\]]*\](.*)\[\/sourcecode\]/i',$src,$matches); 
echo implode("\n",$matches);