Re: [問題] 關於判斷檔案名稱

看板RegExp (正規表示式 Regular Expression)作者 (godspeed lee)時間14年前 (2011/05/04 14:26), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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)

05/04 14:39, , 1F
了解,感謝大大清楚的講解。
05/04 14:39, 1F

05/04 14:40, , 2F
真的非常感謝。
05/04 14:40, 2F
文章代碼(AID): #1DmF5xpy (RegExp)
討論串 (同標題文章)
文章代碼(AID): #1DmF5xpy (RegExp)