2012-07-13 146 views
0

我試圖修復某人的新聞系統中的錯誤,它使用UBB來允許編輯器具有某種靈活性。因此,例如,允許大膽文字下面的正則表達式使用:PHP UBB去除器正則表達式產生錯誤

$message = preg_replace('_\[b\](.*?)\[/b\]_ise', "bold('\\1')", $message); 

這工作得很好。然而,也有以脫去UBB代碼顯示的頭版,這是如下的功能:

$message = preg_replace('_\[b\](.*?)\[/b\]_ise', "\\1", $message); 

而這正則表達式產生一個錯誤,它沒有任何意義,我,畢竟這是完全相同的正則表達式。

Fatal error: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Failed evaluating code: This is bold in /public_html/functions.inc.php on line 122 

121 $message = preg_replace('_\[i\](.*?)\[/i\]_ise', "\\1", $message); 
122 $message = preg_replace('_\[b\](.*?)\[/b\]_ise', "\\1", $message); 
123 $message = preg_replace('_\[u\](.*?)\[/u\]_ise', "\\1", $message); 
+0

上的preg_replace的'e'後綴評價這是一個從正則表達式作爲PHP中生成的代碼;你能否向你的問題添加一個失敗的輸入例子?據猜測,如果你將後綴改爲'is',那麼它應該可以工作。 – andrewsi 2012-07-13 12:09:17

回答

0

嘗試使用:

$message = preg_replace('_\[b\](.*?)\[/b\]_is', "bold('\\1')", $message); 

$message = preg_replace('_\[b\](.*?)\[/b\]_is', "\\1", $message); 
+0

工作,你有這方面的解釋嗎? – user1523409 2012-07-13 13:42:19

+0

修飾符'e'用於評估替換,這意味着PHP執行'\\ 1'作爲代碼。你希望'\\ 1'是一個文本字符串,而不是PHP代碼... *(注意:*'\\ 1' *表示正則表達式搜索模式中的*(*。*?)*)* – 2012-07-13 13:57:26

+0

太棒了,非常感謝你的解釋!原始開發人員可能只是盲目複製代碼... – user1523409 2012-07-18 08:27:25