2011-05-17 52 views
0
$strpost_a = preg_replace("/\[CallName]([^]]+)\[\/CallName\]/e", getInfo('\\1',"fullname"), $strpost_a); 

我總是得到這樣的回報:的Preg替換 - e修飾符

Parse error: syntax error, unexpected T_STRING in C:\wamp\www\-site\files\index\stream.php(88) : regexp code on line 1 
Fatal error: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Failed evaluating code: James -LastName Removed- in C:\wamp\www\-site-\files\index\stream.php on line 88 
+0

更詳細的我假設你張貼的線是88 ... – 2011-05-17 01:50:39

+0

你從什麼地方複製的preg_replace?像一個網站或一個文字文件?你可能會有一些特殊的字符,刪除等號周圍的空白,然後再試一次 – Ibu 2011-05-17 01:56:38

+0

一個小時前你不問這個:http://stackoverflow.com/questions/6024710/preg-replace-with-功能?我可否知道重複發佈同一問題的原因? – anubhava 2011-05-17 02:07:20

回答

0

首先,您需要妥善逃避你括號:

"/\[CallName\]([^]]+)\[\/CallName\]/e" 

二,使用時e修飾符您的替換仍然需要是一個字符串。然而,它是一個字符串,它是評估爲代替反向引用後的PHP代碼。請嘗試以下操作:

"getInfo('\\1', 'fullname')" 

退房的文檔有關e modifier

1

的第二個參數preg_replace必須始終是一個字符串。使用/e標誌不會改變這一點。和第二參數簡單地應爲字符串包括代碼

$strpost_a = preg_replace(
       "/\[CallName]([^]]+)\[\/CallName\]/e", 
       'getInfo("\\1","fullname")', 
       $strpost_a 
      ); 

'getInfo("\\1","fullname")'然後計算的字符串。如果您在此處未用引號括起來,它將不會被preg_replace執行,但是會事先執行。這就是爲什麼你得到了錯誤信息。

(它有時更適合使用preg_replace_callback,但在你的情況下,可能會需要一個特定的getInfo_fullname。)