2
$result = ဖန္တ

$result = preg_replace(
            "/([\p{L}\p{N}A-Za-z0-9@#\".]{1,}[\p{L}\p{N}A-Za-z0-9\.\_-]{0,})/u",
            "foo[('$0')]bar",
            $result);

print_r($result);

//RESULT: foo[('ဖန')]bar္foo[('တ')]bar 

看到bar္foo里面了吗?我不知道为什么我看到这个垃圾角色?如何删除它?但是如果我hello world用作输入字符串,那么它会显示预期的结果:

foo[('hello')]bar foo[('world')]bar
4

1 回答 1

0

看起来MYANMAR SIGN VIRAMA“组合标记”超出了您编写的字符类。

如果你要执行:

var_dump(preg_split('//u', $input, 0, PREG_SPLIT_NO_EMPTY));

您会看到字符串中的各个字符是:( Demo )

array(4) {
  [0]=>
  string(3) "ဖ"
  [1]=>
  string(3) "န"
  [2]=>
  string(3) "္"
  [3]=>
  string(3) "တ"
}

如果您只想用空格替换组合标记,请再次遍历字符串以删除它们。

代码:(演示

$input = 'ဖန္တ';

echo preg_replace(
         ['/[\p{L}\p{N}@#".]+[\p{L}\p{N}._-]*/u', '/\p{M}/u'],
         ["foo[('$0')]bar", ' '],
         $input
     );

输出:

foo[('ဖန')]bar foo[('တ')]bar
于 2021-01-03T13:04:35.537 回答