我正在做一些从php处理Sinhala Unicode的类,我想将混合字符串Unicode和ascii char分隔为带有空格的单独单词。 例如:
$inputstr = "ලංකාABCDE TEST1දිස්ත්රික් වාණිජ්යTEMP මණ්ඩලය @ MNOPQ";
function separatestring($inputstr)
{
//do some code
return $inputstr;
}
echo separatestring($inputstr);
//OUTPUT String = ලංකා ABCDE TEST1 දිස්ත්රික් වාණිජ්ය TEMP මණ්ඩලය @ MNOPQ
我尝试使用带有Regex的preg_replace和几种循环方法,但任何方法都没有成功。请帮帮我。谢谢大家!
答案 0 :(得分:0)
这对我有用:
$inputstr = "ලංකාABCDE TEST1දිස්ත්රික් වාණිජ්යTEMP මණ්ඩලය @ MNOPQ";
function separatestring($inputstr)
{
$re = '#\s+|(?<=[^\x20-\x7f])(?=[\x20-\x7f])'
. '|(?<=[\x20-\x7f])(?=[^\x20-\x7f])#';
$array = preg_split($re, $inputstr);
return array_filter($array);
}
echo implode(" ", separatestring($inputstr));
//OUTPUT String = ලංකා ABCDE TEST1 දිස්ත්රික් වාණිජ්ය TEMP මණ්ඩලය @ MNOPQ
分割的正则表达式意味着以下内容:
#
- 启动regexp(deimeter character),\s+
- 拆分一个或多个空格字符(将空格作为分隔符计算),|
- 或,(?<=[^\x20-\x7f])(?=[\x20-\x7f])
- 在非ASCII和ASCII字符之间的边界上拆分(不将它们视为分隔符),|
- 或,(?<=[\x20-\x7f])(?=[^\x20-\x7f])
- 拆分ASCII和非ASCII字符之间的边界(不将它们视为分隔符),#
- 结束regexp(分隔符)。不幸的是,我的正则表达式并不太优雅,因此有时返回空字符串(因为空格也是ASCII字符)。我已经array_filter
来解决这个问题,但可能存在更优雅的解决方案。
我以这样的方式编写separatestring
,以便在数组中返回。如果需要字符串,请以这种方式替换return
语句:
return implode(" ", array_filter($array));