PHP 正则表达式不起作用。反斜杠有问题吗?

标签 php regex backslash

有问题的正则表达式:

$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/

相关文章:

php - 如何比较 2 个表以查找丢失的项目

regex - Perl 正则表达式匹配具有特殊字符的字符串

javascript - 如何使用正则表达式搜索嵌套 div 的类名

regex - postgresql posix 正则表达式

javascript - 为什么 String.raw 可以处理双反斜杠但常规转义不能?

python - 从十六进制字符串表示创建原始 unicode 字符/输入单个反斜杠

php - PHP 中的 MySQL 查询没有结果,但通过 phpMyAdmin 有 1 个结果

php - 将用户直接转发到 PayPal 上的信用卡处理页面

php - <button> 点击执行mysql查询

c# - 无法从 sql 表中读取包含反斜杠的字符串