免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2903 | 回复: 10
打印 上一主题 下一主题

请教一个经典的模式匹配问题,我已经想了好几天了 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-07-09 18:06 |只看该作者 |倒序浏览
$a="zzzzz123a4xxx123b4www123f4ssss12374";
         ~~~~~   ~~~~~   ~~~~~    ~~~~~我要匹配其中的123*4
怎样用最简单的模式匹配,得到"a b f 7"的结果?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-07-09 18:39 |只看该作者

请教一个经典的模式匹配问题,我已经想了好几天了

$a="zzzzz123a4xxx123b4www123f4ssss12374";
~~~~~ ~~~~~ ~~~~~ ~~~~~我要匹配其中的123*4
怎样用最简单的模式匹配,得到"a b f 7"的结果?

$a=~s/123(.*)4/&getdata($1)/eg;
sub getdata(){
  $data .=$_." ";
  return $_;
}
print $data;
因為手邊沒linux可以測試..所以你要試試看..
就這樣匹配沒錯...

论坛徽章:
0
3 [报告]
发表于 2003-07-09 19:48 |只看该作者

请教一个经典的模式匹配问题,我已经想了好几天了

测试了一下,失败,什么都没有打出来 :~(

论坛徽章:
0
4 [报告]
发表于 2003-07-09 19:58 |只看该作者

请教一个经典的模式匹配问题,我已经想了好几天了

我改了一下,改了getdata()里的return

$a="zzzzz123a4xxx123b4www123f4ssss12374";
$a=~s/123(.*)4/&getdata($1)/eg;

sub getdata(){
my ($a)=@_;
$data.=$a." ";
return $data;
}

print $data;

现在结果是
a4xxx123b4www123f4ssss1237

原来它把最前面的123后最后面的4看成一个了
怎么办???

论坛徽章:
0
5 [报告]
发表于 2003-07-09 20:29 |只看该作者

请教一个经典的模式匹配问题,我已经想了好几天了

太贪吃了,把中间的*去掉。:)

$a="zzzzz123a4xxx123b4www123f4ssss12374";
$a=~s/123(.)4/&getdata($1)/eg;

sub getdata(){
my ($a)=@_;
$data.=$a." ";
return $data;
}

print $data;

论坛徽章:
0
6 [报告]
发表于 2003-07-09 20:34 |只看该作者

请教一个经典的模式匹配问题,我已经想了好几天了

也可把中间的*换成*?

$a="zzzzz123a4xxx123b4www123f4ssss12374";
$a=~s/123(.*?)4/&getdata($1)/eg;

sub getdata(){
my ($a)=@_;
$data.=$a." ";
return $data;
}

print $data;

论坛徽章:
0
7 [报告]
发表于 2003-07-09 20:45 |只看该作者

请教一个经典的模式匹配问题,我已经想了好几天了

成功了,我把最终的最简代码写一下:
------------------------------------------------------------
$a="zzzzz123gong4xxx123xi4www123fa4ssss123cai48888888881234";

$a=~s/123(.*?)4/&getdata($1)/eg;

sub getdata(){
$data .="@_[0] ";
return;
}

print $data;
------------------------------------------------------------
输出结果:
gong xi fa cai

成功啦!!!

论坛徽章:
0
8 [报告]
发表于 2003-07-10 10:20 |只看该作者

请教一个经典的模式匹配问题,我已经想了好几天了


  1. $a="zzzzz123a4xxx123b4www123f4ssss12374";

  2. print "$1\n"  while($a =~ /123(.)4/g);
复制代码

论坛徽章:
0
9 [报告]
发表于 2003-07-10 10:26 |只看该作者

请教一个经典的模式匹配问题,我已经想了好几天了

如果123和4之间非一个字符,那就这样匹配:

print "$1\n"  while($a =~ /123([^4]+)4/g);

论坛徽章:
0
10 [报告]
发表于 2003-07-10 18:10 |只看该作者

请教一个经典的模式匹配问题,我已经想了好几天了

谢谢,可以的

([^4]+)

这个是什么意思?看不明白啊...能不能再讲解一下??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP