前端之家收集整理的这篇文章主要介绍了
Perl--正则,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当用于匹配操作时,有时候 =~ 和 !~ 分别读做“匹配”和“不匹配”(因为“包含”和“不包含”会让人觉得有点模
糊)。
"hot cross buns" =~ /cross/;
print "$`\n"; #匹配左边内容
print "$&\n"; #匹配的内容
print "$'\n"; #匹配内容右边的文本
[oracle@jhoa 2]$ perl 1.pl
hot
cross
buns
为了有更好的颗粒度和提高效率,你可以用圆括弧捕捉你特别想分离出来的部分。每对圆括弧捕捉与圆括弧内的模
式相匹配的子模式。圆括弧由左圆括弧的位置从左到右依次排序;对应那些子模式的子字串在匹配之后可以通过顺
序的变量 $1,$2,$3 等等获得
[oracle@jhoa 2]$ cat 2.pl
$_ = "Bilbo Baggins's birthday is September 22's xxx";
/(.*)'s birthday is (.*)'s(.*)/;
print "Person: $1\n";
print "Date: $2\n";
print " $3\n";
[oracle@jhoa 2]$ perl 2.pl
Person: Bilbo Baggins
Date: September 22
xxx
[oracle@jhoa 2]$ cat 3.pl
$var="model name: Intel(R) Core(TM) i3-2100 cpu @ 3.10GHz's test";
if( $var =~ /model name.*: (.*)'s(.*)/){print "1--$1,2--$2\n";};
[oracle@jhoa 2]$ perl 3.pl
1--Intel(R) Core(TM) i3-2100 cpu @ 3.10GHz,2-- test
?正则修饰词:/i 忽略字母的大小写(大小写无关)
[oracle@jhoa 2]$ cat 4.pl
$var="AAA";
if ($var =~ /aaa/){print "xxx\n";};
[oracle@jhoa 2]$ perl 4.pl
[oracle@jhoa 2]$ cat 4.pl
$var="AAA";
if ($var =~ /aaa/i){print "xxx\n";};
[oracle@jhoa 2]$ perl 4.pl
xxx
元字符 "." 匹配除了换行符以外的任何单个字符
[oracle@jhoa 2]$ cat 5.pl
$var="aaa";
if ($var =~ /aaa./){print "xxx\n";};
[oracle@jhoa 2]$ perl 5.pl
[oracle@jhoa 2]$
[oracle@jhoa 2]$ cat 5.pl
$var="aaa1";
if ($var =~ /aaa./){print "xxx\n";};
[oracle@jhoa 2]$ perl 5.pl
xxx
[oracle@jhoa 2]$ cat 5.pl
$var="aaa\n";
if ($var =~ /aaa./){print "xxx\n";};
[oracle@jhoa 2]$ perl 5.pl
[oracle@jhoa 2]$
此时.号无法匹配回车
[oracle@jhoa 2]$ cat 5.pl
$var="aaa\n";
if ($var =~ /aaa./s){print "xxx\n";};
[oracle@jhoa 2]$ perl 5.pl
xxx
此时.匹配换行符
/s 令 . 匹配换行符并且忽略不建议使用的 $* 变量 s是将字符串作为单行处理
/m 将待匹配的串视为多行,^符号匹配字符窜的起始和新的一行的起始;$符号匹配任意行的末尾。以下例只匹配第一行为a,否则无法匹配。
/x 忽略模式中的空白,格式清晰
/m 令 ^ 和 $ 匹配随后嵌入的 \n。
[oracle@jhoa 2]$ cat 5.pl
$var="abc
ABC
abc";
if ($var =~ s/c$/Z/g){print "$var\n"};
[oracle@jhoa 2]$ perl 5.pl
abc
ABC
abZ
不当做多行处理
[oracle@jhoa 2]$ cat 5.pl
$var="abc
ABC
abc";
if ($var =~ s/c$/Z/mg){print "$var\n"};
[oracle@jhoa 2]$ perl 5.pl
abZ
ABC
abZ
当成多行处理