单反斜杠和双反斜杠之间的差异

时间:2012-01-14 17:13:27

标签: php string comparison pcre backslash

如何检查角色前是否有奇数或偶数反斜杠? PHP看到单反斜杠和双反斜杠相同! 请看下面的代码:

$str = "\a\\b\\\c";
echo preg_replace("/\\\/", "+", $str); // +a+b++c
echo preg_replace("/\x{005c}/u", "+", $str); // +a+b++c

echo strlen($str); // 7
for($i=0; $i<strlen($str); $i++)
    echo bin2hex($str{$i}).', ';
// Output: 5c, 61, 5c, 62, 5c, 5c, 63

我想检查该角色是否已被转义!


如何检查这两个字符串之间的差异:“ \ a ”,“ \\ a ”? 喜欢date()函数。

谢谢,

3 个答案:

答案 0 :(得分:1)

\a可能与\\a相同,但\n肯定与\\n不同。如果带有下一个字符的反斜杠解析为特殊序列,则反斜杠将充当转义字符。否则,反斜杠只是反斜杠。

答案 1 :(得分:1)

您的字符串实际上是\a\b\\c - \a是无效的转义序列,因此它变为\a,但请尝试\n,这是有效的,以查看差异。

答案 2 :(得分:1)

简短的回答是你不能用正则表达式。你不能做可变长度的后视断言来保证这一点。我设法写了一个正在寻找这样的字符串的正则表达式,甚至用一次性子模式进行了优化,但它偶尔会导致缓冲区溢出并在发生大量匹配时使脚本崩溃。

看看strcspn()。它非常适合编写自定义解析函数。您可以使用\作为停止字符。然后使用下一个角色,如果它是特殊的,则对其进行操作,如果不是,则向前跳。它也比正则表达式运行得快。