如何检查角色前是否有奇数或偶数反斜杠? 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()函数。
谢谢,
答案 0 :(得分:1)
\a
可能与\\a
相同,但\n
肯定与\\n
不同。如果带有下一个字符的反斜杠解析为特殊序列,则反斜杠将充当转义字符。否则,反斜杠只是反斜杠。
答案 1 :(得分:1)
您的字符串实际上是\a\b\\c
- \a
是无效的转义序列,因此它变为\a
,但请尝试\n
,这是有效的,以查看差异。
答案 2 :(得分:1)
简短的回答是你不能用正则表达式。你不能做可变长度的后视断言来保证这一点。我设法写了一个正在寻找这样的字符串的正则表达式,甚至用一次性子模式进行了优化,但它偶尔会导致缓冲区溢出并在发生大量匹配时使脚本崩溃。
看看strcspn()
。它非常适合编写自定义解析函数。您可以使用\
作为停止字符。然后使用下一个角色,如果它是特殊的,则对其进行操作,如果不是,则向前跳。它也比正则表达式运行得快。