奇怪的preg_replace逃脱?

时间:2011-07-18 10:22:49

标签: php escaping preg-match

我只是想知道如何解决这个问题。

我有这段代码

<?php
$test = "\u0000hi";
preg_match("|\\\\u0000|", $test, $a);
print_r($a);
?>

在上述情况下,它的工作原理。但是,我不知道为什么要使用太多的转义字符?

以下案例

<?php
$test = "\\u0000hi";
preg_match("|\\\\\\\\u0000|", $test, $a);
print_r($a);
?>

我在\中有8个转义字符preg_match,在$test变量中有两个转义字符(与前一个示例中的重复计算)

有人可以解释一下这个问题吗?

2 个答案:

答案 0 :(得分:1)

两个$test字符串表示法在内部评估为相同的字符串。亲自尝试一下:

var_dump("\u0000hi");
// Outputs string(8) "\u0000hi"

var_dump("\\u0000hi");
//Outputs string(8) "\u0000hi"

相同的原始字符串,因此您需要相同的正则表达式来匹配它。这是其中有四个\的那个。

答案 1 :(得分:1)

如果你想找到一个反斜杠'\u'

你需要在你的正则表达式'/\\u/'

中逃避它

如果你把你的正则表达式放在双引号中你需要转义两个反斜杠b / c否则它们被评估为你的字符串中的一个反斜杠,然后作为你的正则表达式中的元字符:

"/\\\\u/"

在顶部我写了'\ u'而不是“\ u”就像在你的情况下,b / c实际上如果\ u是“\ u”中的控件字符,那么你无论如何也找不到任何反斜杠。 / p>