为什么在preg_match中有如此多的反斜杠来解析命名空间?

时间:2017-05-30 18:43:37

标签: php preg-match

我正在阅读的一本书有这段代码,但无法理解为什么preg_match中有这么多反斜杠。第一个\可能意味着匹配文字反斜杠,但为什么在表达式中还有两个?

这是使用自动加载“提供名称空间支持”的代码:

// listing 05.18
$namespaces = function ($path) {
    if (preg_match('/\\\\/', $path)) {
        $path = str_replace('\\', DIRECTORY_SEPARATOR, $path);
    }
    if (file_exists("{$path}.php")) {
        require_once("{$path}.php");
    }
};
\spl_autoload_register($namespaces);
$obj = new util\LocalPath();
$obj->wave();

2 个答案:

答案 0 :(得分:0)

PHP(与许多语言一样)需要使用反斜杠转义反斜杠。正则表达式还要求使用反斜杠转义反斜杠。因此,要匹配单个文字反斜杠,在正则表达式字符串中,必须使用\\\\:PHP将字符串转换为两个转义反斜杠,正则表达式解析器将其视为一个转义反斜杠。

答案 1 :(得分:0)

  1. 我想匹配:\
  2. 所以我需要正则表达式:/\\/
  3. 需要在PHP中用字符串表示,所以看起来像:'/\\\\/'