preg_replace()转义:单反双反斜杠?

时间:2014-04-22 08:57:13

标签: php regex preg-replace

我注意到有人使用带有双反斜杠的preg_replace()进行转义(例如,<\\/div>而不是<\/div>)。

这是否必要?我尝试了两种方式,但我不知道其中的区别。

简单的例子......

preg_replace('/<div>\\s*text<\\/div>/', '', $somestring);

VS

preg_replace('/<div>\s*text<\/div>/', '', $somestring);

3 个答案:

答案 0 :(得分:1)

PHP字符串文字中的反斜杠可以具有特殊含义。例如,"\n"是换行符,而不是字符串“\ n”。要编写字符串“\ n”,您需要将反斜杠转义为"\\n"。但是,如果反斜杠后面的字符没有任何特殊含义,则反斜杠将按原样使用。例如。 "\foo"是字符串“\ foo”。在单引号字符串中,只有一个案例,你需要来转义反斜杠,它直接在字符串结尾之前:'foo\\'→“foo \”。

因此,在PHP字符串文字或\\/中编写\/具有相同的含义,因为/对PHP没有任何特殊意义。无论哪种方式都是正确的。这不是关于正则表达式语法,而是关于PHP语法。

答案 1 :(得分:0)

使用单引号时没有必要,它在您的代码示例中没有任何区别。 (对于使用双引号,只有在与下一个字符组合时才需要它具有特殊含义)

对于单引号(双引号也是如此),反斜杠只有在它是字符串的最后一个字符时才必须进行转义。

您必须编写'foo\\'而不是'foo\',否则反斜杠会转义单引号并导致语法错误。

答案 2 :(得分:0)

您可以简单地使用:

preg_replace('%<div>\s*text</div>%', '', $somestring);

在这种情况下,你不需要逃避任何事情。

PHP - 转义序列
http://www.php.net/manual/en/regexp.reference.escape.php