Chinaunix首页 | 论坛 | 博客
  • 博客访问: 148011
  • 博文数量: 47
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 402
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-11 10:08
文章存档

2013年(47)

我的朋友

分类: PERL

2013-03-11 10:55:03

点击(此处)折叠或打开

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my $str1 ="aab12345678";
  5. my $str2 = "ab1234yb1234567";
  6. my $str = $str1 . "\n" . $str2;

  7. my (@substr,@result);
  8. $str =~ /(.+)(?=.*\n.*\1)(*PRUNE)(?{push @substr,$1})(*F)/;
  9. @substr = sort { length($b) <=> length($a) } @substr;
  10. @result = grep { length == length $substr[0] } @substr;
  11. print "@result\n";
一个或多个非\n字符后接0个或多个非\n字符,后接\n, 后接0个或多个非\n字符,再后接红色部分所匹配的字符串,蓝色部分是零宽断言。

里面有几个注意的:
1.零宽断言,上面已经有介绍了。
2.*PRUNE,这个是find里面的参数用法,在perl的正则里面也可以进行使用。(-prune就像一个判断语句,当发现-prune前面的表达式math时,执行到-prune之后就会输出一个1结果)
3.?{push @substr,$1},这个也要注意,?号不能丢。(现在还不太清楚这个?的用意,等以后了解了再来添加)。
4.(*F)这个也要特别注意,没有它的话,会只循环一次。(至于为什么,我还不是太清楚..需要继续找资料)。


这是一个帖子上看到的解法,感觉很帅,思路很新颖。

以后遇到此类问题,也参考这个思路进行下尝试。
阅读(1472) | 评论(0) | 转发(0) |
1

上一篇:没有了

下一篇:perl的sort函数

给主人留下些什么吧!~~