1、简单模式:若模式匹配的对象是$_的内容,只要把模式写在一对斜线//中就可以了,其实也是m//的缩写,m可以省略。
$_ = "yabba dabba doo";
if(/abba/){
print "matched";
}`
2、若模式匹配的对象不是$_的内容,绑定操作符=~用右边的模式来匹配左边的字符串。“
if ($question =~ /please/) {
print ("Thank you for being polite!\n");
}
else {
print ("That was not very polite!\n");
}
3、模式中的特殊字符
(1)+ 表示匹配前一个条目一次以上。如:/de+f/指def、deef、deeeeef等。它尽量匹配尽可能多的相同字符,如/ab+/在字符串abbc中匹配的将是abb,而不是ab。
(2)* 表示匹配前一个条目零次或多次。如/de*f/匹配df、def、deeeef等。
(3)?表示前一个条目可有可无。如/de?f/匹配def、df。
(4). 是能匹配任意一个字符的通配符,换行符除外。如/bet.y/可以匹配betty、betsy、bet=y、等等。因此.*会匹配任意字符零次到无限次数。.+会匹配任意字符1次以上。
(5)转义字符\ 如果你想在模式中包含通常被看作特殊意义的字符,须在其前加斜线”\”。如:/*+/中*即表示字符*,而不是上面提到的一个或多个字符的含义。斜线的表示为/\/,点号的表示为/./。
(6)匹配任意字母或数字 [a-z]表示任意小写字母,[A-Z]表示任意大写字母。任意大小写字母、数字的表示方法为:/[0-9a-zA-Z]/。 首字母大写,其余小写表示方法为/[A-Z][a-z]+/。
(7)字符集
\d 任意数字 [0-9]
\D 除数字外的任意字符 [^0-9]
\w 任意单词字符 [_0-9a-zA-Z]
\W 任意非单词字符 [^_0-9a-zA-Z]
\s 空白 [ \r\t\n\f]
\S 非空白 [^ \r\t\n\f]
(8)锚位
^ 或 \A 仅匹配串首
$ 或 \Z仅匹配串尾
\b 匹配单词边界
\B 单词内部匹配
例如:/^def/只匹配以def打头的字符串,/def
/只匹配以def结尾的字符串,结合起来的/def
/只匹配字符串def(?)。\A和\Z在多行匹配时与^和$不同。
/\bfred\b/可以匹配fred,但无法匹配fredrick、alfred、或manfredmann。
\B它能匹配所有\b不能匹配的位置。因此/\bsearch\B/会匹配searches、searching与searched,但不能匹配search或researching。
(9)匹配指定数目的字符
字符对{}指定所匹配字符的出现次数。如:/de{1,3}f/匹配def,deef和deeef;/de{3}f/匹配deeef;/de{3,}f/匹配不少于3个e在d和f之间;/de{0,3}f/匹配不多于3个e在d和f之间。
(10)择一匹配
字符”|”指定两个或多个选择来匹配模式。如:/def|ghi/匹配def或ghi。
4、模式匹配修饰符(flag)
/g 改变模式中的所有匹配
/i 忽略模式中的大小写
/e 替换字符串作为表达式
/m 将待匹配串视为多行
/o 仅赋值一次
/s 将待匹配串视为单行 。因为点号.无法匹配换行符,那么/s将模式中的每个点号转换成字符集[\d\D]来处理,就是说匹配任意字符,包括换行符。
/x 忽略模式中的空白
5、用s///进行替换
查找并替换,但是该操作只会进行一次替换。s///g可以进行所有可能的不重复的替换。
例如:
s/^\s+//; 将开头的空白替换成空字符串
s/\s+$//; 将结尾的空白替换成空字符串
s/^\s+|\s+$//g; 去除开头和结尾的空白符
6、大小写转换
\U:将其后的所有字符转换成大写的
\L : 将其后的所有字符转换成小写的
\E: 关闭大小写转换的功能
\l和\u: 只影响其后的第一个字符
例如:
$_ = "I saw Barney with Fred";
s/(fred|barney)/\U$1/gi; # "I saw BARNEY with FRED"
s/(fred|barney)/\L$1/gi; # "I saw barney with fred"
s/(\w+) with (\w+)/\U$2\E with $1/i; # "I saw FRED with barney"
s/(fred|barney)/\u$1/ig; # "I saw FRED with Barney"
s/(fred|barney)/\u\L$1/ig; # "I saw Fred with Barney"
7、split操作符
my @array = split /separator/, $string;
my @array = split /:/, “abc:def:g:h”; # 得到(“abc”, “def”, “g”, “h”)
split会保留开头处的空字段,舍弃结尾处的空字段
my @array = split /:/, “:::a:g:h:::”; # 得到(“”, “”, “”, “a”, “g”, “h”)
8、join函数
my $result = join $glue,@pieces;
注意列表必须至少有两个元素,否则无法用胶水结合成一个字符串。$glue 必须是字符串,而不是模式。
my $result = join ":", 4,6,8; # 得到4:6:8