项目中因为需要过滤字符,写了这样一行代码
- if (preg_match("/[\x21-\x26\x28-\x2C\x2F-\x30\x3C-\x5F\x61-\x7E]/", chr($chr)))
只要执行,总会出现一个这样的提示“Warning: preg_match() [function.preg-match]: Unknown modifier ‘-’ in D:\WebRoot\idtest.php on line 31”并且执行结果不正确。纠结了很久才发现,只需要将表达式的双引号改成单引号就OK了。
- if (preg_match('/[\x21-\x26\x28-\x2C\x2F-\x30\x3C-\x5F\x61-\x7E]/', chr($chr)))
原因是PHP会对用双引号包起来的字符进行解析例如:
- $str = '早上好';
- echo "$str";// 这样就会在页面输出$str的内容“早上好”。而不是输出“$str”
虽然知道原因了,但PHP是刚学的。至今不知道是那个字符被解析掉了。只能先记下这个经验:PHP中用正则表达式,一定要用单引号。
希望能给跟我一样正在纠结这个问题的同学一些帮助。
文章评论(查看全部)