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) |