一尘不染

PHP正则表达式模式中需要额外的反斜杠

php

测试另一个用户的问题的答案时,我发现了一些我不理解的东西。问题是\t``\n``\r用一个空格替换字符串中的所有文字字符。

现在,我尝试的第一个模式是:

/(?:\\[trn])+/

令人惊讶的是,这没有用。我在Perl中尝试了相同的模式,但效果很好。经过一番尝试和错误后,我发现PHP希望该模式匹配3或4个反斜杠,如下所示:

/(?:\\\\[trn])+/

要么

/(?:\\\[trn])+/

这些模式-令我惊讶的-都有效。为什么需要这些额外的反斜杠?


阅读 335

收藏
2020-05-29

共1个答案

一尘不染

您需要4个反斜杠来表示正则表达式中的1个,因为:

  • 2个反斜杠用于在字符串("\\\\" -> \\)中转义
  • 1个反斜杠用于在正则表达式引擎(\\ -> \)中转义

从PHP文档中,

转义任何其他字符将导致反斜杠也被打印出来1

因此,对于\\\[

  • 1个反斜杠用于对进行转义\,因为\[无效("\\\[" -> \\[
  • 1个反斜杠用于在正则表达式引擎(\\[ -> \[)中转义

是的,它是可行的,但不是一个好习惯。

2020-05-29