正規切断の問題


今日csdnの一人の友达がどのように漢字の2つの2つをスペースで分けるかを見ました.
例えば「私たちの祖国は花園ですね」「私たちの祖国は花園ですね」という形です.当時はあまり考えていませんでした.家に帰っても大丈夫です.いっそ研究してみました.
前提:
これはcuに写した中国語文字に一致するコードです.
$d=「私の太陽」;
@pattern = ('[/u4e00-/u9fff]','[^/u4e00-/u9fff]','[chr(0xa1)-chr(0xff)]','[^chr(0xa1)-chr(0xff)]','[/x80-/xff][/x80-/xff]','[^/x80-/xff][^/x80-/xff]','[/x80-/xff]','[^/x80-/xff]','[/u4e00-/u9fa5/uf900-/ufa2d]','[^/u4e00-/u9fa5/uf900-/ufa2d]','[/u4e00-/u9fa5]','[^/u4e00-/u9fa5]','[/x00-/xff]','[^/x00-/xff]');
foreach $p (@pattern)
{
    @result = ($d =~/($p)/is);
print「モード$pマッチング結果:@result/n」;
}
したがってperlの解決は以下の通りである.
$d=「私の太陽私の太陽あなた」;
$d = reverse $d;
$d =~ s/(?<=([/x80-/xff][/x80-/xff]))(?=(([/x80-/xff][/x80-/xff]){2})+$)/-/g;
$d = reverse $d;
print  "$d";
この方法は少し愚かだが,基本的に任務を完成した.またperlmonkで上級者に教えてもらい、他の解決策を記録しました.
$d =~ s/(/d/d)(?=/d)/$1-/g;



1 while $d =~ s/(?<=/d/d)(?=/d)/-/;
上記1 while$d=~s/(?<=/d/d)(?=/d)/-/;これ、私はまた$d=~s/(?<=/d/d)(?=/d)/-/gを思いついた.彼らの違いを比較しました
1:
$d = "123456789";
while ($d =~ s/(?<=/d/d)(?=/d)/-/){
     print $d,$/;
}
2:
$d = "123456789";
$d =~ s/(?<=/d/d)(?=/d)(?{print $`,"/n"})/-/g;
print $d;
まだよく分からないので、後で研究します.また、phpの解決は比較的簡単です.
$string=「私の太陽私の太陽あなた」;
echo  preg_replace("/([/x80-/xff][/x80-/xff][/x80-/xff][/x80-/xff])(?=[/x80-/xff][/x80-/xff])/is", "//1 ", $string);