天天看點

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     當成多行處理