7、模式中的变量替换
将句子分成单词:
$pattern="[\\t] ";
@words=split(/$pattern/,$line);
8、字符范围转义
E转义字符描述范围
\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]
例:/[\da-z]/匹配任意数字或小写字母。
9、匹配任意字符
字符"."匹配除换行外的所有字符,通常与*合用。
10、匹配指定数目的字符
字符对{}指定所匹配字符的出现次数。如:/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之间。
11、指定选项
字符"|"指定两个或多个选择来匹配模式。如:/def|ghi/匹配def或ghi。
例:检验数字表示合法性
if($number=~/^-?\d $|^-?0[xX][\da-fa-F] $/){
print("$numberisalegalinteger.\n");
}else{
print("$numberisnotalegalinteger.\n");
}
其中^-?\d $匹配十进制数字,^-?0[xX][\da-fa-F] $匹配十六进制数字。
12、模式的部分重用
当模式中匹配相同的部分出现多次时,可用括号括起来,用\n来多次引用,以简化表达式:
/\d{2}([\W])\d{2}\1\d{2}/匹配:
12-05-92
26.11.87
070492等
注意:/\d{2}([\W])\d{2}\1\d{2}/不同于/(\d{2})([\W])\1\2\1/,后者只匹配形如17-17-17的字符串,而不匹配17-05-91等。
13、转义和特定字符的执行次序
象操作符一样,转义和特定字符也有执行次序:
特殊字符描述
()模式内存
*?{}出现次数
^$\b\B锚
|选项
14、指定模式定界符
缺省的,模式定界符为反斜线/,但其可用字母m自行指定,如:
m!/u/jqpublic/perl/prog1!等价于/\/u\/jqpublic\/perl\/prog1/
注:当用字母作为定界符时,不做变量替换;当用特殊字符作为定界符时,其转义功能或特殊功能即不能使用。
15、模式次序变量
在模式匹配后调用重用部分的结果可用变量$n,全部的结果用变量$&。
$string="Thisstringcontainsthenumber25.11.";
$string=~/-?(\d )\.?(\d )/;#匹配结果为25.11
$integerpart=$1;#now$integerpart=25
$decimalpart=$2;#now$decimalpart=11
$totalpart=$&;#nowtotalpart=25.11
四、模式匹配选项
选项描述
g匹配所有可能的模式
i忽略大小写
m将串视为多行
o只赋值一次
s将串视为单行
x忽略模式中的空白
1、匹配所有可能的模式(g选项)
@matches="balata"=~/.a/g;#now@matches=("ba","la","ta")
匹配的循环:
while("balata"=~/.a/g){
$match=$&;
print("$match\n");
}
结果为:
ba
la
ta
当使用了选项g时,可用函数pos来控制下次匹配的偏移:
$offset=pos($string);
pos($string)=$newoffset;
2、忽略大小写(i选项)例
/de/i匹配de,dE,De和DE。
3、将字符串看作多行(m选项)
在此情况下,^符号匹配字符串的起始或新的一行的起始;$符号匹配任意行的末尾。
4、只执行一次变量替换例
$var=1;
$line=;
while($var<10){
$result=$line=~/$var/o;
$line=;
$var ;
}
每次均匹配/1/。
5、将字符串看作单行例
/a.*bc/s匹配字符串axxxxx\nxxxxbc,但/a.*bc/则不匹配该字符串。
6、在模式中忽略空格
/\d{2}([\W])\d{2}\1\d{2}/x等价于/\d{2}([\W])\d{2}\1\d{2}/。
五、替换操作符
语法为s/pattern/replacement/,其效果为将字符串中与pattern匹配的部分换成replacement。如:
$string="abc123def";
$string=~s/123/456/;#now$string="abc456def";
在替换部分可使用模式次序变量$n,如s/(\d )/[$1]/,但在替换部分不支持模式的特殊字符,如{},*, 等,如s/abc/[def]/将把abc替换为[def]。
替换操作符的选项如下表:
选项描述
g改变模式中的所有匹配
i忽略模式中的大小写
e替换字符串作为表达式






