2011-11-17 51 views
3

我有一個字符串,像這樣:PHP:更換所有出現的 「[CODE] ... [/ CODE]」 在一個字符串

Here is my code sample, its not too great: 

[CODE] 
<?php 
    echo "Some testing..."; 
?> 
[/CODE] 

I hope you enjoy. 

現在我要替換[CODE的所有出現] ... [/ CODE],返回值爲highlight_string($content_of_CODE)。 [CODE] .. [/ CODE] -pair可能會在字符串中出現多次。

如何在不使用eval的情況下解決此問題?

謝謝你的幫助!

回答

8

假設[CODE]塊沒有嵌套,preg_replace_callback()是一個完美的候選人。

preg_replace_callback('/\[CODE\](.*?)\[/CODE\]/', 'highlight_string'); 
+0

我剛剛看到highlight_string有第二個參數,我該如何設置這個使用你的回調方法? (我必須將第二個參數設置爲true) –

+0

檢查文檔,它默認發送'$ matches'。不確定發送第二個參數,但總是可以找到另一種方法來確定如何調用highlight_string()。 'is_array()'。 –

+0

我總是得到這個錯誤:未知修飾符'C'。我正在使用這段文字: '好吧,嘿哈哈,這是Java的蹩腳和bug的ist。 PHP For The Win !!' 和你的正則表達式... –

0

使用這個表達式:

(?s)\[CODE\].*?\[/CODE\] 
0

content_of_CODE = reg_replace( '/!\ S +] | [\ S */* CODE] /', '',$ content_of_CODE);

相關問題