2017-05-30 15 views
1

我正在阅读的一本书有这段代码,但不知道为什么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(); 

回答

0

PHP(像许多语言)需要用反斜杠反斜杠逃脱。正则表达式还需要反斜杠以反斜杠进行转义。因此,要匹配正则表达式字符串中的单个文字反斜线,您必须使用\\\\:PHP将字符串转换为两个转义反斜线,正则表达式解析器将其视为一个转义反斜线。

0
  1. 我想匹配:\
  2. 所以我需要的正则表达式:/\\/
  3. 它需要通过一个字符串在PHP中表示,所以看起来像:'/\\\\/'
相关问题