2

有问题的正则表达式:

$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

我弄乱了“\”的数量,但它没有改变任何东西。关于可能出现问题的任何建议?

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

4

1 回答 1

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.

于 2012-08-08T19:22:30.623 回答