看板 RegExp 關於我們 聯絡資訊
※ 引述《ta0306556 (POIL)》之銘言: : 我想要抓出php上傳檔案的暫存檔名。 : 所以使用下面的語法做判斷 : preg_match("/C:\\WINDOWS\\TEMP\\([^\.]+\.tmp)/",$_FILES['file']['tmp_name'],$m); : 可是他卻出現錯誤 "unmatched parentheses" : 我要判斷的資料為 "C:\WINDOWS\TEMP\php7C9.tmp" : 目標是抓出後面的 "php7C9.tmp" : 但是我這個正規表示法,已經在測試網頁,測試過都正常。(網頁如下) : http://www.rubular.com/# : 根據我測試的結果是TEMP\\ ←這個斜線出的問題 : 可是我也不知道該怎麼改才會變成正確。 : 所以上來請教各位大大。 : 感謝大家。 改成這樣就好了: "/C:\\\\WINDOWS\\\\TEMP\\\\([^\.]+\.tmp)/" 因為 PHP 會把 "..." 中的 "\\" 替換成 "\" 所以你原來的字串會變成 "/C:\WINDOWS\TEMP\([^\.]+\.tmp)/" 對 Regex 來說,\W 可能會被解釋成「英文字與數字之外的字元」, \T 可能會解釋成 T(實際情形要查一下手冊,不過這裡不是重點) \( 解釋成一般括號字元,但是後面有個右括號 ')' 仍然 會被解釋成 group,所以就會有括號(group)不對稱的錯誤訊息 總而言之就是 php 本身會把 "..." 中的 \\ 替換成 \,preg 又會再把 \\ 替換一次,所以你要打 4 次 \ 才會得到正確結果 :) -- http://godspeedlee.myweb.hinet.net/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.70.233.117 ※ 編輯: godspeedlee 來自: 111.70.233.117 (05/04 14:27) ※ 編輯: godspeedlee 來自: 111.70.233.117 (05/04 14:28)
ta0306556:了解,感謝大大清楚的講解。 05/04 14:39
ta0306556:真的非常感謝。 05/04 14:40