测试 another user's question 的答案时我发现了一些我不明白的东西。问题是用一个空格替换字符串中的所有文字 \t
\n
\r
字符。
现在,我尝试的第一个模式是:
/(?:\\[trn])+/
令人惊讶的是,这不起作用。我在 Perl 中尝试了相同的模式并且效果很好。经过一些尝试和错误后,我发现 PHP 需要 3 或 4 个反斜杠来匹配该模式,如:
/(?:\\\\[trn])+/
或
/(?:\\\[trn])+/
这些模式 - 令我惊讶的是 - 都有效。为什么需要这些额外的反斜杠?
最佳答案
您需要 4 个反斜杠来表示正则表达式中的 1,因为:
- 2 个反斜杠用于在字符串中进行反转义 (
"\\\\"->\\
) - 1 个反斜杠用于正则表达式引擎中的反转义 (
\\->\
)
来自 PHP 文档,
escaping any other character will result in the backslash being printed too1
因此 \\\[
,
- 1 个反斜杠用于对
\
进行转义,一个保留是因为\[
无效 ("\\\["->\\[
) - 1 个反斜杠用于正则表达式引擎中的反转义 (
\\[ ->\[
)
是的,它有效,但不是一个好的做法。
关于php - PHP 正则表达式模式中需要额外的反斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2145804/