php - 如何匹配十六进制字符序列并将其替换为PHP中的空格

标签 php regex preg-replace

我有一段文本需要清理一些字符。这些字符显示在我附加到问题的图片中。我想用空格 x20 替换它们。

First hex sequence

Second hex sequence

我的尝试是使用 preg_replace

$result = preg_replace("/[\xef\x82\xac\x09|\xef\x81\xa1\x09]/", "\x20", $string);

对于特定情况,此方法有效,但在某些情况下无效,因为例如我有一个带逗号的文本,它匹配 x82 并将其从该文本中删除。

我如何编写正则表达式来精确搜索此序列 ef 82 ac 09 或另一个 ef 81 a1 09,而不是像 那样分别搜索每一对code>ef 82 ac 09?

最佳答案

1.) 您匹配字符类中 6 个不同的十六进制字节或管道字符中的任何一个。可能想使用组 (?:...|...) 来匹配不同的字节序列。

2.) 字节序列与图像不匹配。好像你搞砸了两个字节。图片显示:ef 82 a1 09ef 81 ac 09 与您的尝试:\xef\x82\xac\x09 | \xef\x81\xa1\x09

3.) 当testing your input sample

$str = "de la nouvelle;      Fourniture $         Option :";

foreach(preg_split("//u", $str) AS $v) {
  var_dump($v, bin2hex($v)); echo "\n";
}

事实证明,09 太多了。要删除的字符实际上是ef81acef82a1。 所以正确的正则表达式是 (?:\xef\x81\xac|\xef\x82\xa1)

$result = preg_replace("/(?:\xef\x81\xac|\xef\x82\xa1)/", "\x20", $string);

参见 test at eval.in

关于php - 如何匹配十六进制字符序列并将其替换为PHP中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31591269/

相关文章:

php - 从多个文件中提取数据

python - 使用Python提取特定格式的括号

python正则表达式选择整个单词

PHP preg_replace 正则表达式问题

c# - 有条件地为逗号分隔字符串中的标记添加前缀

javascript - 使用 Javascript 将字符串添加到 CSS 代码

php - 如何增加 jquery 数据表中的单元格填充?

php - SQL select 语句 PHP 将动态多行结果存储到变量中并转换为字符串以在电子邮件中发送

PHP:如何结合 foreach 和 explode

regex - 以编程方式,Youtube Content ID如何工作?