1.Perl中的正则表达式

  在Perl中叫做模式, 是一个匹配(或不匹配)某字符串的模板, 是一种小程序, 对于一个字符串, 要么匹配, 要么不匹配.

  使用简易模式: 将模式写在一对正斜线(/)中即可.

2.元字符

.  匹配非换行符 \n 的任何单字符, 需要注意的是转义字符如  \t  算做一个字符. 匹配  .  应该使用  \.

*  匹配前面的内容0次或多次, 使用  .*

+

?

3.模式分组

()

/(.)\1/ 表示匹配连续2个相同的字符, 使用  /(.)(.)\2\1/ 可以得到4个字符的回文串; 分组的依据是左括号从左到右的序号, 从1开始, 如连续4个字符回文串也可以写作 /((.)(.)\3\2)/

  分组编号的处理: Perl的原则是贪心取最大值,  所以\111 是第111号组, 如果只是想用\1, 而且在后面匹配字符"11",那就会冲突;  可以使用\g{N}来避免,  其中当N为正数时, 表示从左到右的第N个组,  当为负数时, 表示相对于当前从右往左数的第N个组. 

4.选择匹配

|

5.字符集

[] 中表示, 它只匹配单个字符, 但是可以使字符集中的任何一个; 如  [a-cw-z]   [a-zA-Z0-9_]

0-9] <=> \d     [A-Za-z0-9_] <=> \w  [\f\t\n\r ] <=> \s #主要\r后面有一个空格

  反义简写:  [^\d] [^\w] [^\s] 分别表示非数字, 非单词字符, 非空白符; 对应等价于: \D  \W  \S

^ 在字符集中才表示反义简写, 但是在模式中表示开头, 结尾对应  $  , 如  /^perl/

6.正则表达式使用

  匹配:m/<regexp>;/ (还可以简写为 /<regexp>;/ ,略去 m)
  替换:s/<pattern>;/<replacement>;/
  转化:tr/<pattern>;/<replacemnt>;/

=~  表示匹配,  !~

$roger = "AABCDEF";
$Roger = "AABCDEF";
$count = $roger =~ tr/A/H/c; # /c表示将不匹配的字符替换, 同理有/d表示把所有匹配的字符全部替换
$count2 = $Roger =~ tr/A/H/; # 将匹配的字符替换,省略了/d 即: tr/A/H/d;
print $count."\t".$roger."\n"; #5    AAHHHHH
print $count2."\t".$Roger."\n"; #2    HHBCDEF
$roger = "AABCDEF";
$count = $roger =~ tr/A/H/ds; # /s表示要替换的字符串中如果持续连续两个相同字符,就去掉冗余的
print $count."\t".$roger."\n"; #2    HBCDEF

  2种用法:

$roger = "AABCDEF";
$count = $roger =~ tr/A//; # 等价于tr/A/A/; 统计模式出现的次数, 不会改变原串
print $count."\t".$roger."\n"; #2    AABCDEF
$count = $roger =~ tr/[A-Z]/[a-z]/;  #替换成小写
print $count."\t".$roger."\n"; #7    aabcdef

s/(word1)(word2)/$2$1/