我有一段文本需要清理一些字符。这些字符显示在我附加到问题的图片中。我想用空格 x20
替换它们。
我的尝试是使用 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 09
和 ef 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
太多了。要删除的字符实际上是ef81ac
和ef82a1
。
所以正确的正则表达式是 (?:\xef\x81\xac|\xef\x82\xa1)
$result = preg_replace("/(?:\xef\x81\xac|\xef\x82\xa1)/", "\x20", $string);
关于php - 如何匹配十六进制字符序列并将其替换为PHP中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31591269/