作者godspeedlee (godspeed lee)
看板RegExp
标题Re: [问题] 关於判断档案名称
时间Wed May 4 14:25:56 2011
※ 引述《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)
1F:推 ta0306556:了解,感谢大大清楚的讲解。 05/04 14:39
2F:→ ta0306556:真的非常感谢。 05/04 14:40