2011-10-15 33 views
3

我製作了一個系統,可以從教育中獲取所有可選主題並將其放入數據庫中。這工作正常。
現在我想確定如果您選擇「財務A」,您不能選擇「財務C」,我試圖用preg_replace這樣做,因爲主題是數組。但它不斷給我一個錯誤:REGEX - 動態內容的Preg_replace搜索

Delimiter must not be alphanumeric or backslash 

現在這裏是一些代碼:

if 
(
    preg_replace("/" + $name_without_level + " (A|B|C)/", "", $andre_fag) 
     == $andre_fag 
    || preg_replace("/" + $name_without_level + " (A|B|C)/", "", $andre_fag2) 
     == $andre_fag2 
){ 

變量$name_without_level沒有給出A,B或C,水平的主題名稱。

如何解決該錯誤?我嘗試了所有我能想到的。

+0

您需要將錯誤處理添加到您的代碼中。如果發生錯誤,您應該向自己顯示失敗的正則表達式。然後你會看到什麼是錯的。無論如何,你應該在你的問題中增加'$ name_without_level'。 – hakre

+1

「這裏是一些代碼:」是否這不是錯誤消息中提到的代碼行?因爲即使你的變量中有一個空的'/',那個pcre錯誤也不會匹配。 – mario

回答

2

想象一下$name_without_level只是"Finance/Markets"。想象一下你的正則表達式會發生什麼。

使用preg_quoteDocs,以確保您尋找合適的字符串字面,你不破壞你的正則表達式:

$pattern = sprintf('/%s (A|B|C)/', preg_quote($name_without_level)); 
if 
(
    preg_replace($pattern, "", $andre_fag) == $andre_fag 
    || preg_replace($pattern, "", $andre_fag2) == $andre_fag2 
){ 

這並不意味着這是你的代碼唯一的問題。您需要進行錯誤檢查才能真正找到錯誤。