为什么这个正则表达式什么也找不到? x00-xFF

Why does this regular expression find nothing? x00-xFF

我正在阅读此程序更新以查看新内容,突然我看到了这个东西:

 if( preg_match("/[\xE0-\xFF][\x80-\xFF][\x80-\xFF]/", $variablino_namerino) )
 {
    //do stuff
 }

我立即用谷歌搜索 preg_match 并发现了这个编程技术的奇妙分支,它用我从未听说过的正则表达式创造了奇迹。观看了几个视频并阅读了一些文档。然后我开始解决这个问题并了解到 E0 和 FF 之间存在的值可能不存在,所以我更改了这个表达式以便它总能找到一些东西:

if( preg_match("/[\x00-\xFF][\x00-\xFF][\x00-\xFF]/", $variablino_namerino) )
{
    //do stuff
}

实际上并没有! So i thought this was the problem,但在我将语句更改为:

后它开始工作
 if( preg_match("/[\x01-\xFF][\x01-\xFF][\x01-\xFF]/", $variablino_namerino) )
 {
    //do stuff
 }

这里x01还是控制符吧?另外,该网站采用 UTF-8 格式。

所以你不能在范围内包含 x00 是因为它是 NULL 值还是不同?

一个解决方案是在声明正则表达式时加倍反斜杠或使用单引号:

if( preg_match('/[\x00-\xFF][\x00-\xFF][\x00-\xFF]/', 'text') ) {
 //do stuff
}

IDEONE demo

当使用单引号时,\x 符号被视为 \x 并且由正则表达式引擎正确处理。

[^\x00-\x7F]

我发现类似这样的东西需要 x00。 我居然用它来检测特殊字符