我正在尝试查找并替换字符串中的二进制值:
$str = '('.chr(0x00).chr(0x91).')' ;
$str = preg_replace("/\x00\x09/",'-',$str) ;
但是我得到“警告:preg_replace():正则表达式中的空字节”错误消息。
如何处理Regex / PHP中的二进制值?
答案 0 :(得分:10)
这是因为你在你的正则表达式模式周围使用双引号"
,这使得php引擎解析了字符\x00
和\x09
。
如果您使用单引号,它将起作用:
$str = '(' . chr(0x00) . chr(0x91) . ')' ;
$str = preg_replace('/\x00\x09/', '-', $str) ;
但如果我理解你的问题,你的正则表达式似乎也不正确。如果您想用短划线\x00
替换字母\x91
和-
,则必须将它们放入方括号[]
:
$str = preg_replace('/[\x00\x91/]', '-', $str) ;