PHP Regex Expression无效。反斜杠的问题?

时间:2012-08-08 19:16:54

标签: php regex backslash

有问题的正则表达式:

$reg = '/[.]{1,}[\/\\]/';
if(preg_match($reg, $dir))...

我已在http://regexpal.comhttp://regex.larsolavtorvik.com/上测试了这个表达式,但它运行正常,但在我的PHP脚本中,我收到了此通知。

Message: preg_match() [function.preg-match]: Compilation failed: missing terminating ] for character class at offset 12

我已经弄乱了'\'的数字,但它没有改变任何东西。关于可能出现什么问题的任何建议?

我试图寻找类似的问题,但我似乎遇到的是没有添加分隔符的人。

1 个答案:

答案 0 :(得分:4)

这是因为\\将被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这样的控制字符。