【发布时间】:2013-12-28 19:08:03
【问题描述】:
为了匹配文字反斜杠,很多人和the PHP manual 说:总是三重转义它,就像这样\\\\
注意:
单引号和双引号 PHP 字符串具有反斜杠的特殊含义。因此,如果 \ 必须与正则表达式
\\匹配,则必须在 PHP 代码中使用"\\\\"或'\\\\'。
这是一个示例字符串:\test
$test = "\\test"; // outputs \test;
// WON'T WORK: pattern in double-quotes double-escaped backslash
#echo preg_replace("~\\\t~", '', $test); #output -> \test
// WORKS: pattern in double-quotes with triple-escaped backslash
#echo preg_replace("~\\\\t~", '', $test); #output -> est
// WORKS: pattern in single-quotes with double-escaped backslash
#echo preg_replace('~\\\t~', '', $test); #output -> est
// WORKS: pattern in double-quotes with double-escaped backslash inside a character class
#echo preg_replace("~[\\\]t~", '', $test); #output -> est
// WORKS: pattern in single-quotes with double-escaped backslash inside a character class
#echo preg_replace('~[\\\]t~', '', $test); #output -> est
结论:
- 如果模式是单引号,反斜杠必须双转义
\\\以匹配文字 \ - 如果模式是双引号,则取决于是否
反冲在一个字符类中,它必须至少被双重转义
\\\在字符类之外,它必须被三重转义\\\\
谁能告诉我一个不同之处,其中单引号模式中的双转义反斜杠,例如'~\\\~' 将匹配与双引号模式中的三重转义反斜杠不同的任何内容,例如"~\\\\~" 或失败。
何时/为什么/在什么情况下在单引号模式中使用双转义 \ 是错误的,例如'~\\\~' 用于匹配文字反斜杠?
如果这个问题没有答案,我将继续在单引号 PHP 正则表达式模式中使用双转义反斜杠 \\\ 来匹配文字 \,因为它可能没有任何问题。
【问题讨论】:
-
\t为 TAB 定义,当您将它放在双引号内时。因此,如果您使用任何其他示例,其中t不会正好在反斜杠之后,这将是可观的。 -
根据谷歌的说法,
tripple的意思是“一匹马的步态,左腿和右腿一起移动。”。我认为正确的拼写是triple。不知道您为什么要还原该编辑。 -
@Amal Murali 哎呀,对不起!文字中有很多
tripples:-)接下来的15分钟我不会碰文字。 -
有点不清楚你在问什么。能否请您改述一下这个问题?
-
@Jonny5 阅读此answer。主要的“想法”如下: PHP 使用正则表达式引擎,在本例中为 PCRE。当你写一个变量。它将通过 PHP,然后 PHP 会将其传递给正则表达式引擎。正则表达式引擎需要的是双反斜杠来匹配反斜杠。你如何做到这一点,在 PHP 中取决于你。我会一直使用 4 个反斜杠,这样既安全又能防止混淆。
标签: php regex preg-replace