Re: [問題] 關於判斷檔案名稱
看板RegExp (正規表示式 Regular Expression)作者godspeedlee (godspeed lee)時間14年前 (2011/05/04 14:26)推噓1(1推 0噓 1→)留言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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
RegExp 近期熱門文章
PTT數位生活區 即時熱門文章