一个正则切割问题

原创 2007年09月12日 22:07:00
今天看到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上请教了高人,记录了一下其他的解决方案:
$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);










版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

实现一个支持正则匹配的Filter以及Spring管理Filter遇到的问题

实现一个可支持白名单和黑名单url正则匹配的Filter,同时解决Spring管理Filter遇到的生命周期的问题。

IE和火狐关于正则验证的一个问题/g/m

文章分类:Web前端 最近一个项目中做的一个前台的手机验证(/^13/d{9}$/g.test(str2))||(/^15/d{9}$/g.test(str2))||(/^18/d{9}$/g.tes...

Linux shell中的一个问题 ${}带正则匹配的表达式

目前在准备龙芯项目的PMON,在研究其编译过程的时候,看到一些make 语句,百思不得其解。后来在shell编程中看到一点资料,牵扯到Shell中的正则表达式。故记录下来,以备后来查阅。
  • pankul
  • pankul
  • 2013-07-26 13:49
  • 1998

一个很好的正则介绍

第一,让我们看看两个特别的字符:‘^’和‘$’他们是分别用来匹配字符串的开始和结束,以下分别举例说明 : "^The": 匹配以 "The"开头的字符串; "of despair$": 匹配以 "of...

apache rewrite重定向规则,rewrite正则,二级域名指向一级域名,多域名指向一个域名,IP转向域名

首先有一台linux服务器,上面有4个IP都可以指向这个服务器,有10个域名 4个IP分别是 1.1.1.1 1.1.1.2 1.1.1.3 1.1.1.4 10个域名分别是 a.com...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)