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

作者: godspeedlee (妳,我可以)   2011-05-04 14:25:56
※ 引述《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 次 \ 才會得到正確結果 :)
作者: ta0306556 (POIL)   2011-05-04 14:39:00
了解,感謝大大清楚的講解。真的非常感謝。

Links booklink

Contact Us: admin [ a t ] ucptt.com