缅甸语正则表达不起作用。显示垃圾字符串

时间:2015-04-15 16:29:55

标签: php regex

// $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

1 个答案:

答案 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