Regex-PHP中的反斜杠

时间:2014-02-17 11:52:19

标签: php regex

我正在尝试用PHP学习正则表达式并且现在停留在这里。我的问题看似愚蠢,但请解释一下 我通过了一个链接:
Extra backslash needed in PHP regexp pattern

但我无法理解:

在回答中他提到了两个陈述:

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

我的问题:
“unes​​caping”这个词实际上意味着什么? unescaping的目的是什么? 为什么我们需要4个反斜杠才能将它包含在正则表达式中?

2 个答案:

答案 0 :(得分:3)

反斜杠在regexen PHP中都有特殊含义。在这两种情况下,它都用作转义字符。例如,如果要在PHP字符串文字中编写文字引号字符,则不起作用:

$str = ''';

PHP会“混淆”,'结束字符串,哪些是字符串的一部分。这就是\的来源:

$str = '\'';

转义 '的特殊含义,因此它不是终止字符串文字,而是现在只是字符串中的普通字符。还有更多的转义序列,如\n

现在这意味着\是一个具有特殊含义的特殊字符。要想要编写文字\时要逃避这个难题,你必须将文字反斜杠转义为\\

$str = '\\'; // string literal representing one backslash

这在PHP和regexen中都是一样的。如果要在正则表达式中编写文字反斜杠,则必须编写/\\/。现在,既然你把你的regexen写成PHP字符串,你需要双重转义:

$regex = '/\\\\/';

PHP字符串转义机制首先将一对\\简化为一个\,因此实际的正则表达式是/\\/,这是一个正则表达式,意思是“一个反斜杠”。

答案 1 :(得分:0)

我认为你可以使用“preg_quote()”:

http://php.net/preg_quote

此函数可以转义特殊字符,因此您可以按原样提供输入,而不必自行转义:

<?php
$string = "online 24/7. Only for \o/";
$escaped_string = preg_quote($string, "/"); // 2nd param is optional and used if you want to escape also the delimiter of your regex
echo $escaped_string; // $escaped_string: "online 24\/7.  Only for \\o\/"
?>