2010-05-04 90 views
2

我試圖從一個字符串在PHP中獲取一些東西。在使用RegexBuddy和正則表達式測試儀(火狐插件),它的作品不錯,但PHP給我下面的:preg_match問題

警告:的preg_match() [function.preg匹配]:未能編譯 :無與倫比的括號在 偏移在 34 d:\路徑\使用example.php 在線路62上

我的圖案是"/.{4}_tmp\\([A-Za-z0-9.\\]*)\(([0-9]*)\) : (.*)/i"

一個例子的字符串:C:\Temp\browseide\projects\32\821C_tmp\SourceFiles\main.c(8) : error C2143: syntax error : missing ';' before 'for'

什麼使用RegexBuddy得到:

821C_tmp\SourceFiles\main.c(8) : error C2143: syntax error : missing ';' before 'for' 
Group 1: SourceFiles\main.c 
Group 2: 8 
Group 3: error C2143: syntax error : missing ';' before 'for' 

回答

2

你需要逃避的PHP字符串中的反斜槓:

"/.{4}_tmp\\\\([A-Za-z0-9.\\\\]*)\\(([0-9]*)\\) : (.*)/i" 
+2

一個\\兼任了''\\的到底是不是必要的 - PHP有沒有什麼特別的'\('或'\)'所以它不需要逃脫......也不會傷害,只是覺得值得一提。 – gnarf 2010-05-04 17:53:15

+0

感謝您的快速回復 – Biroka 2010-05-04 17:59:03

2

您需要再次逃離反斜槓,一旦PHP解析字符串該字符串你結束:

/.{4}_tmp\([A-Za-z0-9.\]*)\(([0-9]*)\) : (.*)/i 

嘗試echo "/.{4}_tmp\\([A-Za-z0-9.\\]*)\(([0-9]*)\) : (.*)/i";

你應該有你的\\\\雙引號裏面,如果你想在模式