Chinaunix首页 | 论坛 | 博客
  • 博客访问: 264682
  • 博文数量: 28
  • 博客积分: 2520
  • 博客等级: 少校
  • 技术积分: 657
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-14 00:02
文章分类

全部博文(28)

文章存档

2010年(3)

2009年(11)

2008年(14)

我的朋友

分类: LINUX

2009-12-16 12:00:42

cat test.txt
From:xuanyuzheng@126.com
To:sxxzq@126.com.cn
To:sxxzq@126.com
Subject:test regex regex
subject:test regex Regex
$6.459
$49.04
Tom says:"abc ,hao are you?";
常用的正则表达式简记:
\s匹配所有空白 包括空格和\t,\s*等价于 [ \t]*
\S表示除\s以外的所有字符
\w等价于[a-zA-Z0-9]
\W表示除了\w的所有字符,等价于[^a-zA-Z0-9]
\d表示数字,等价于[0-9]
\D表示除了\d的字符,等价于[^0-9]
perl中使用正则表达式方式为$variable =~ m/regex/ m可以省略,如果想忽略大小写可以使用$variable =~ m/regex/i,在perl中匹配成功后,使用$1,$2...来保存相对应的()内容,相当于egrep sed 中的\1等。
使用正则表达式替换为 $var =~ s/.../../
 
 
环视功能
顺序环视(?=) 从左向右 逆序环视(?<=)从右向左
 
cat test.pl
#!/usr/bin/perl -w
while(<>)
{
  if($_ =~ /regex\s+(?=Regex)/)
{
print $_;
}
}
./test.pl test.txt
subject:test regex Regex
 
$_ =~ /regex\s+(?=Regex)/ 表示regex后面有一个或者n个空白,然后右边是一个Regex.环视所匹配的位置就是空白后R前
 
cat test.pl
#!/usr/bin/perl -w
while(<>)
{
if(s/(?<=,)(?=hao)/zheng /g)
{
print $_."\n";
}
./test.pl test.txt
Tom says:"abc ,zheng hao are you?";
 
s/(?<=,)(?=hao)/zheng /g 表示这个位置的左面有一个,右面有一个hao,然后再这个位置添加zheng 。
 
 
 
否定顺序环视(?!)子表达式不能匹配右侧文本
否定逆序环视(?
 
给test.txt增加一行,如下:
The population of 23445546758 if growing;
 
 
 
cat test.pl
#!/usr/bin/perl -w
while(<>)
{
if(s/(?<=\d)(?=(\d\d\d)+(?!\d))/,/g)
{
print $_."\n";
}
}
 
./test.pl test.txt
The population of 23,445,546,758 if growing;
 
 
 
 
 
 
 
 
 
阅读(438) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~