我注意到有人使用带有双反斜杠的preg_replace()进行转义(例如,<\\/div>
而不是<\/div>
)。
这是否必要?我尝试了两种方式,但我不知道其中的区别。
简单的例子......
preg_replace('/<div>\\s*text<\\/div>/', '', $somestring);
VS
preg_replace('/<div>\s*text<\/div>/', '', $somestring);
答案 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