PHP 中的正则表达式二进制模式搜索

Regex Binary Pattern Search in PHP

我正在尝试查找和替换字符串中的二进制值:

$str = '('.chr(0x00).chr(0x91).')' ;
$str = preg_replace("/\x00\x09/",'-',$str) ;

但我收到 "Warning: preg_replace(): Null byte in regex" 错误消息。

如何处理 Regex/PHP 中的二进制值?

这是因为您在正则表达式模式周围使用双引号 ",这使得 php 引擎解析字符 \x00\x09.

如果您改用单引号,它将起作用:

$str = '(' . chr(0x00) . chr(0x91) . ')' ;
$str = preg_replace('/\x00\x09/', '-', $str) ;

但是如果我正确理解你的问题的话,你的正则表达式似乎也不正确。如果要将字符 \x00\x91 替换为破折号 -,则必须将它们放在方括号 []:

$str = preg_replace('/[\x00\x91]/', '-', $str) ;