如何在PHP中匹配十六进制字符序列并将其替换为空格
我有一个文本,我需要清理一些字符。这些字符显示在我附加到问题的图片中。我想将它们替换为空白如何在PHP中匹配十六进制字符序列并将其替换为空格,php,regex,preg-replace,Php,Regex,Preg Replace,我有一个文本,我需要清理一些字符。这些字符显示在我附加到问题的图片中。我想将它们替换为空白x20 我的尝试是使用preg\u replace $result = preg_replace("/[\xef\x82\xac\x09|\xef\x81\xa1\x09]/", "\x20", $string); 对于特定的情况,这种方法有效,但对于某些情况,它不会,因为例如,我有一个带有逗号的文本,它匹配了x82,并将其从该文本中删除 我如何编写我的正则表达式来精确搜索这个序列ef 82 ac 0
x20
我的尝试是使用preg\u replace
$result = preg_replace("/[\xef\x82\xac\x09|\xef\x81\xa1\x09]/", "\x20", $string);
对于特定的情况,这种方法有效,但对于某些情况,它不会,因为例如,我有一个带有逗号的文本,它匹配了x82
,并将其从该文本中删除
我如何编写我的正则表达式来精确搜索这个序列ef 82 ac 09
,或者另一个ef 81 a1 09
,而不是像ef
82
ac
091]那样分别搜索每一对。可能想使用组(?:
…|
…)
来匹配不同的字节序列
2.)此外,字节序列与图像不匹配。好像你弄乱了两个字节。图片显示:ef 82 a1 09
和ef 81 ac 09
与您的尝试相比:\xef\x82\xac\x09
\xef\x81\xa1\x09
3)什么时候
结果证明,09
太多了。要删除的字符实际上是ef81ac
和ef82a1
。
因此,正确的正则表达式应该是(?:\xef\x81\xac |\xef\x82\xa1)
请参见如果整个文件的内容是UTF-8编码的文本,则您可能希望从中删除字符,因为\xef\x82\xac
解码到代码点U+F0AC和\xef\x81\xa1
解码到代码点U+F061,它们属于专用区域U+E000..U+F8FF
$result = preg_replace("~\p{Co}~u", " ", $input);
\p{Co}
是Unicode中属于其他专用类别的所有字符的字符类,包括3个范围U+E000..U+F8FF、U+F0000..U+FFFFD中的所有字符,U+100000..U+10FFFD.@anubhava图片中有字符串。您尝试过使用类似于str\U replace
的简单方法吗?正如我所建议的,使用var\U dump
而不是图片需要输入的示例文本。很好,您成功了!:]刚刚使用。@Jonny5请将您的解决方案作为答案发布,以便我们可以在解决问题后关闭此问题。谢谢
$result = preg_replace("/(?:\xef\x81\xac|\xef\x82\xa1)/", "\x20", $string);
$result = preg_replace("~\p{Co}~u", " ", $input);