// $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
答案 0 :(得分:0)
看起来 MYANMAR SIGN VIRAMA
“组合标记”不属于您编写的字符类。
如果你要执行:
var_dump(preg_split('//u', $input, null, PREG_SPLIT_NO_EMPTY));
您会看到字符串中的单个字符是:(Demo)
array(4) {
[0]=>
string(3) "ဖ"
[1]=>
string(3) "န"
[2]=>
string(3) "္"
[3]=>
string(3) "တ"
}
如果您只想用空格替换组合标记,请再次遍历字符串以将其删除。
代码:(Demo)
$input = 'ဖန္တ';
echo preg_replace(
['/[\p{L}\p{N}@#".]+[\p{L}\p{N}._-]*/u', '/\p{M}/u'],
["foo[('$0')]bar", ' '],
$input
);
输出:
foo[('ဖန')]bar foo[('တ')]bar