我知道PHP会输出一个字符串。但我不明白为什么
echo "\\\/";
生成结果
\\/
有人有想法吗?
答案 0 :(得分:1)
嗯,我想最容易理解的方法是查看一个视图示例:
echo "/"; = /
echo "//"; = //
echo "///"; = ///
echo "\"; = syntax error
echo "\\"; = \
echo "\""; = "
echo "\\\" = syntax error
echo "\\\/"; = \\/
为什么呢?好\
用于转义。最后一个示例是使用\\
和/
转义\ \/
。虽然/
不需要任何转义但它不会受到伤害。
您可能想知道echo "\\\"
失败的原因。但是如果你密切关注,你会发现\\
没问题但是第三个\
被认为是字符串末尾的"
的转义,这显然是不应该得到的转义因此语法错误。
答案 1 :(得分:0)
反斜杠是PHP字符串文字中的特殊字符。它用于转义字符。例如,如果要在带引号的字符串中编写引号,则需要对其进行转义以避免语法模糊/不正确:
echo "\""; // (Because otherwise, WTF exactly would """ mean?!)
由于反斜杠是一个特殊字符,因此需要一种方法使其“非特殊”以避免其特殊属性。如果要在字符串中写入单个反斜杠,则需要将其转义:
echo "\\"; // (Because "\" would be a syntax error, since the " would be escaped.)
所以在"\\\/"
中,有一个转义反斜杠(\\
→\
),然后又有一个反斜杠。由于第二个(第三个)反斜杠后面没有任何模糊字符,因此它只是按原样(即\/
并不意味着什么特别的,所以它只是意味着“\ /”)。所以你在该字符串中有三个实际字符:\
,\
和/
。
请注意,这将是语法错误:
echo "\\\";
因为第一对是一个反斜杠,后跟\"
,后者是转义"
,然后没有“真实”"
后来结束字符串。
答案 2 :(得分:0)
如果\
后面的字符不代表a valid escape sequence,那么它将保持原样。
模式\\
是一个有效的转义序列,因此它被替换为单个\
模式\/
不是一个有效的转义序列,所以它不为人所知。
答案 3 :(得分:0)
反斜杠字符有多种用途。首先,如果它后跟一个非字母数字字符,它会消除角色可能具有的任何特殊含义。这种反斜杠作为转义字符的使用适用于内部和外部字符类。
例如,如果要匹配“*”字符,则在模式中写入“*”。这适用于以下字符是否会被解释为元字符,因此在非字母数字之前加上“\”来指定它代表自身总是安全的。特别是,如果要匹配反斜杠,请编写“\”。
注意: 单引号和双引号PHP字符串具有反斜杠的特殊含义。因此,如果\必须与正则表达式\匹配,则必须在PHP代码中使用“\\”或“\\”。