为什么这个正则表达式什么都没找到X00-XFF

时间:2015-07-31 06:32:38

标签: php regex preg-match

我正在阅读这个程序更新,看看什么是新的,突然间我看到了这个:

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

我立刻用Google搜索了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值还是不同的东西?

1 个答案:

答案 0 :(得分:1)

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

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

请参阅IDEONE demo

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