Fork me on GitHub

标签 反斜杠 下的文章

PHP字符串中的转义

最近用字符串拼装正则表达式的时候,发现转义时加一条反斜杠与两条的效果是一样的

$pattern = "\d";
$pattern = "\\d";
preg_match('/'.$pattern.'/', '123', $matches);

非常不解,在查阅资料和多次测试后得出结论如下:

反斜杠在PHP的两种字符串(单引号定界符、双引号定界符)中,都具有转义效果,但是它们支持的转义字符是不同的。

单引号为定界符的php字符串,支持两个字符的转义

    \' 单引号 ( $var = '\''; )

    \\ 反斜杠 ( $var = '\\'; )

双引号为定界符的php字符串,支持下列字符的转义:

    \\ 反斜杠 ( $var = "\\"; )

    \" 双引号 ( $var = "\""; )

    \
 换行(LF 或 ASCII 字符 0x0A(10))  
    \
 回车(CR 或 ASCII 字符 0x0D(13))  
    \t 水平制表符(HT 或 ASCII 字符 0x09(9))  

    \$ 美元符号 

在字符串中,当未被转义的反斜杠后面的字符支持转义时,这个反斜杠后面的字符就会被转义。

例如:

<?php
    $str = '\\';    //var_dump($str)将输出:string(1) "\"
    $str = '\a';    //var_dump($str)将输出:string(2) "\a"
    $str = '\\a';    //var_dump($str)将输出:string(2) "\a"
    $str = '\\\a';    //var_dump($str)将输出:string(3) "\\a"