if ($varname =~ /^$[A-Za-z][_0-9a-zA-Z]*$/) {
print ("$varname is a legal scalar variablen");
} elsif ($varname =~ /^@[A-Za-z][_0-9a-zA-Z]*$/) {
print ("$varname is a legal array variablen");
} elsif ($varname =~ /^[A-Za-z][_0-9a-zA-Z]*$/) {
print ("$varname is a legal file variablen");
} else {
print ("I don't understand what $varname is.n");
}
例3:b在单词边界匹配:/bdef/匹配def和defghi等以def打头的单词,但不匹配abcdef。/defb/匹配def和 abcdef等以def结尾的单词,但不匹配defghi,/bdefb/只匹配字符串def。注意:/bdef/可匹配$defghi,因为$并不被看作是单词的部分。
例4:B在单词内部匹配:/Bdef/匹配abcdef等,但不匹配def;/defB/匹配defghi等;/BdefB/匹配cdefg、abcdefghi等,但不匹配def,defghi,abcdef。
7、模式中的变量替换
将句子分成单词:
$pattern = "[t ]+";
@words = split(/$pattern/, $line);
8、字符范围转义
转义字符 描述 范围
d 任意数字 [0-9]
D 除数字外的任意字符 [^0-9]
w 任意单词字符 [_0-9a-zA-Z]
W 任意非单词字符 [^_0-9a-zA-Z]
s 空白 [ rtnf]
S 非空白 [^ rtnf]
例:/[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 ("$number is a legal integer.n");
} else {
print ("$number is not a legal integer.n");
}
其中 ^-?d+$ 匹配十进制数字,^-?0[xX][da-fa-F]+$ 匹配十六进制数字。
12、模式的部分重用
当模式中匹配相同的部分出现多次时,可用括号括起来,用n来多次引用,以简化表达式:/d{2}([W])d{2}1d{2}/ 匹配:
12-05-92
26.11.87
07 04 92等
注意:/d{2}([W])d{2}1d{2}/ 不同于/(d{2})([W])121/ ,后者只匹配形如17-17-17的字符串,而不匹配17-05-91等。









