有问题的正则表达式:
$reg = '/[.]{1,}[\/\\]/';
if(preg_match($reg, $dir))...
我已经在 http://regexpal.com 上测试了这个表达式和 http://regex.larsolavtorvik.com/它工作正常,但在我的 PHP 脚本中我收到此通知。
Message: preg_match() [function.preg-match]: Compilation failed: missing terminating ] for character class at offset 12
我搞乱了“\”的数量,但它没有改变任何东西。对于可能出现的问题有什么建议吗?
我试图寻找类似的问题,但我遇到的似乎都是没有添加分隔符的人。
最佳答案
这是因为 PHP 会将 \\
转义为单个 \
,这将使 preg_match
将您的模式评估为
/[.]{1,}[\/\]/
要在 PHP 字符串中包含 2 个反斜杠,您需要实际键入 4:
$reg = '/[.]{1,}[\/\\\\]/';
preg_match($reg, "test");
或者使用 PHP 的heredoc:
$reg = <<<REGEX
/[.]{1,}[\/\\\\]/
REGEX;
preg_match($reg, "test");
编辑: 似乎 Heredoc 也需要 4 个反斜杠。这是因为像 \n
这样的控制字符。
关于PHP 正则表达式不起作用。反斜杠有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11871592/