测试另一个用户的问题的答案时,我发现了一些我不理解的东西。问题是\t``\n``\r用一个空格替换字符串中的所有文字字符。
\t``\n``\r
现在,我尝试的第一个模式是:
/(?:\\[trn])+/
令人惊讶的是,这没有用。我在Perl中尝试了相同的模式,但效果很好。经过一番尝试和错误后,我发现PHP希望该模式匹配3或4个反斜杠,如下所示:
/(?:\\\\[trn])+/
要么
/(?:\\\[trn])+/
这些模式-令我惊讶的-都有效。为什么需要这些额外的反斜杠?
您需要4个反斜杠来表示正则表达式中的1个,因为:
"\\\\" -> \\
\\ -> \
从PHP文档中,
转义任何其他字符将导致反斜杠也被打印出来1
因此,对于\\\[,
\\\[
\
\[
"\\\[" -> \\[
\\[ -> \[
是的,它是可行的,但不是一个好习惯。