今天看到csdn一个哥们说怎么把汉字两个两个的给以空格分开。
就是比如 ”我们的祖国是花园啊“ 分成 ” 我们 的祖 国是 花园 啊“ 这样的形式。当时没有怎么想。回家来没事,索性研究了一下。
前提:
这个是在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上请教了高人,记录了一下其他的解决方案:
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);
就是比如 ”我们的祖国是花园啊“ 分成 ” 我们 的祖 国是 花园 啊“ 这样的形式。当时没有怎么想。回家来没事,索性研究了一下。
前提:
这个是在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)/-/; 这个,我就又想到了 $d =~ s/(?<=/d/d)(?=/d)/-/g; 同时比较了他们的区别:
或者:
1 while $d =~ s/(?<=/d/d)(?=/d)/-/;
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);