perl学习笔记(六)--正则

#!/usr/bin/perl

use 5.010;

=pod
	perl中表达式三种形式:
	1、匹配:m/<regexp>;/mosxg cg
	2、替换:s/<pattern>;/<replacement>;/mosxge g表示全部替换,而不是只替换首次出现的;e表示把<replacement>;当做一个运算符;
	3、转化:tr/<pattern>;/<replacement>;/cds
	=~ 表示匹配
	!~ 表示不匹配
	默认处理$_变量
=cut

my $str = "I Love Perl";
say $str =~ m/Perl/; #如果在$str中发现'Perl'字符串,则说明匹配成功,返回1,否则返回0   #结果为:1
say $str =~ s/Perl/Bash/; #表示将标量$str中的'Perl'替换成'Bash',替换成功则返回1,否则返回0   #结果为:1
say $str !~ tr/A-Z/a-z/; #表示将变量$str中的所有大写字母转化为小写字母,如果转化发生了则返回0,否则返回1   #结果为:

my $string = "I Love Perl";
$string =~ s/(Love)/<$1>;/;
say $string; #结果为:I <Love>; Perl
$string = "I Love Perl";
$string =~ s/(I)(.*)(Perl)/<$3>;$2<$1>;/;
say $string; #结果为:<Perl>; Love <I>;


$str = "i:love:perl";
$str =~ s/:/*/;
say $str;#结果为:i*love:perl
$str =~ s/:/*/g;
say $str;#结果为:i*love*perl
$str !~ tr/*/ /;
say $str;#结果为:i love perl

$str = "www22cgi44";
$str =~ s/(\d+)/$1*2/eg;
say $str;#结果为:www44cgi88


$str = "Hello World,Hello Perl.";
$str =~ tr/a-z/a-z/s;
say $str;#结果为:Helo World,Helo Perl.

#匹配边界
#\b匹配任何单词边界,\w类和\W类之间的区别定义。 
#因为\w一个字的字符,\W相反,这通常是指一个词的终止。 
#\B断言不是一个单词边界匹配任何位置
$str = "the cat sat";
say $str =~ /\bcat\b/; #结果为1
$str = "cat on the mat";
say $str =~ /\bcat\b/; #结果为1
$str = "verification";
say $str =~ /\Bcat\B/; #结果为1
$str = "the cat on the mat";
say $str =~ /\Bcat\B/; #结果为
$str = "catatonic";
say $str =~ /\bcat\B/; #结果为1
$str = "polecat";
say $str =~ /\bcat\B/; #结果为
$str = "polecat";
say $str =~ /\Bcat\b/; #结果为1
$str = "catatonic";
say $str =~ /\Bcat\b/; #结果为

$date = '03/26/1999';
$date =~ s#(\d+)/(\d+)/(\d+)#$3/$1/$2#;
say $date;#结果为:1999/03/26

#使用\G断言
#\G断言,让您可以继续搜索从最后一个匹配发生的点。
#例如,在下面的代码,我们使用的\G,使我们可以搜索到正确的位置,
#然后提取一些信息,而无需创建一个更复杂的,单一的正则表达式:
$string = "The time is: 12:31:02 on 4/12/2015";
$string =~ /:\s+/g;
($time) = ($string =~ /\G(\d+:\d+:\d+)/);
$string =~ /.+\s+/g;
($date) = ($string =~ m{\G(\d+/\d+/\d+)});
print "Time: $time, Date: $date\n";

say "----正则表达式中的变量----";
#正则表达式中的变量
#$ ,包含匹配无论最后的分组匹配
#$&,其中包含整个匹配的字符串
#$`,其中包含匹配字符串前的一切字符
#$',其中包含匹配的字符串后的一切字符。
$string = "The food is in the salad bar";
$string =~ m/foo/;
say "Before: $`",length($`);
say "Matched: $&",length($&);
say "After: $'",length($');

##?Pattern?仅仅匹配一次
@list = qw/food foosball subeo footnote terfoot canic footbrdige/;
foreach (@list){
   $first = $1 if ?(foo.*)?;
   $last = $1 if /(foo.*)/;
}
print "First: $first, Last: $last\n"; #结果为:First: food, Last: footbrdige

你可能感兴趣的:(perl)