免费注册 查看新帖 |

Chinaunix

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

Perl的一个匹配 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-22 20:01 |只看该作者 |倒序浏览
perl 怎么匹配 "xccdd092042:fkd`~" 这样的的任意字符串,比如,
  1. if ($data =~ /^(.*) [ERROR] (.*)$/){
  2.       print $1,"[ERRPR]",$2,"\n";
  3.     }
复制代码
比如xccdd092042:fkd`~ [ERROR] dfjdkfdj
我想分别把xccdd092042:fkd`~和dfjdkfdj当作$1和$2取出来

论坛徽章:
0
2 [报告]
发表于 2010-09-22 20:10 |只看该作者
回复 1# jayamge


    just escape \[ERROR\] and you will get it!

论坛徽章:
0
3 [报告]
发表于 2010-09-22 20:15 |只看该作者
回复 2# ulmer


    yeah,thank you,it is ok!
但是我有个疑问,(.*)不是只能匹配零个或一个或多个任意字符么

论坛徽章:
0
4 [报告]
发表于 2010-09-22 20:30 |只看该作者
[b]回复 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=12896186&ptid=1790185]3#[/url] [i]jayamge[/i] [/b]

pls learn more about perl regular expressions:
> perldoc perlrequick
> perldoc perlretut

[] is special operate char. for pattern match Ranges!!!

论坛徽章:
0
5 [报告]
发表于 2010-09-22 21:04 |只看该作者
回复 3# jayamge


    对,你说的没有错,(.*)可以匹配0个或者任意多个字符。
   我猜你是想问为什么(.*)没有包含"[ERROR]"吧,如果是这个,那么:
   正则匹配有回溯机制
   举个例子,比如用表达式 /.*a/匹配字符串 124abc
     过程如下:
   因为.*是贪婪的,所以首先.*回“吃掉”整个字符串 124abc
    然后,为了匹配表达式的a,.*会“吐出”最后一个字符c(这时.*匹配的字符串是 124ab)去匹配a,但显然c不能匹配a
    所以.*会继续“吐出”最后一个字符b,而b也不能匹配a
    然后,当.*继续“吐出”a,a能匹配a,整个表达式匹配成功,退出
   此时,.*匹配的就是 124

   当然,如果我误解了你的意思,就权当看看故事吧,呵呵

论坛徽章:
1
未羊
日期:2014-09-08 22:47:27
6 [报告]
发表于 2010-09-23 09:13 |只看该作者
也可以用split来分割。

论坛徽章:
0
7 [报告]
发表于 2010-09-23 17:38 |只看该作者
回复 5# 珞水的大叔


    谢谢,我明白了,非常感谢您的指点!

论坛徽章:
0
8 [报告]
发表于 2010-09-23 19:45 |只看该作者
回复 7# jayamge


    能帮到就好

论坛徽章:
0
9 [报告]
发表于 2010-09-25 09:39 |只看该作者
my $str='xccdd092042:fkd`~ [ERROR] dfjdkfdj';
$str=~m#.*(?=\s+\[)#;
print "$&\n";
$str=~m#(?<=\]\s).*#;
#这里向前查找\s不能用+,如有多个空格只好在替换了
print "$&\n";
$str=~m#([^\s]+)\s+\[.*\]\s+(\w+)#;
print "$1\t$2\n";
看看能不能用
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP