2011-03-25 60 views
3

我有一系列.txt文件,我正在閱讀for循環。我已經在一些文本文件中放置了一個令牌[widget_]preg_match錯誤:編譯失敗:缺少終止]字符類

因此,例如,文本文件的全部內容可能是[widget_search]。另一個文本文件可能包含內容[widget_recent-posts]。其他人可能只是HTML格式的文本,根本沒有令牌。

在for循環中,我正在做一個preg_match來查看文本文件是否與其中的內容匹配我的令牌模式。如果匹配,我正在執行一些條件代碼。

但是,當我運行跟蹤測試以查看是否存在匹配時,出現錯誤。

錯誤是:

警告:的preg_match()[function.preg匹配]:編譯失敗:用於字符類缺少終止]在C的失調8:\ Xampplite文件\ htdocs中\測試\可溼性粉劑內容上線\插件\插件測試\小部件,test.php的227

而這裏的代碼在行227:

if (preg_match("/[widget_/i",$widget_text)) {//do something} 

回答

12

你應該逃脫[文字是這樣的:

if (preg_match("/\[widget_/i",$widget_text)) {//do something}

+0

我想這是簡單的東西。您是否會建議我更改我的令牌格式以避免不必逃避角色或其他潛在問題? – 2011-03-25 14:03:23

+1

使用[]沒有什麼問題 - 只是它們碰巧是正則表達式中的元字符。使用你想要的任何分隔符,只要知道可能有一些其他功能/模塊使用該替代字符作爲元字符。 – 2011-03-25 14:08:27

+0

感謝您的快速幫助和exlano。 +1 – 2011-03-25 14:11:27

0

它更清潔使用preg_quote這樣的:

if (preg_match(preg_quote("/[widget_/i"),$widget_text)) {//do something} 
相關問題