像平常所见表示开头的 脱字符(^) 和 表示末尾的 美元符 ($) 都称为一个锚位。比如 /^\s*$/ 可以匹配一个空白行,该空白行中可以包含各种制表符以及空格。这里 \s 表示“空白” 它相当于 [\f\t\n\r ] ;其中 \f 表示换页,\t 表示制表,\n 表示换行,\r 表示回车 以及后面一个空白表示空格。
\w 表示单字匹配。注意,不是匹配整个单词,而是匹配单词字符,单词字符是“字母,下划线 以及数字”,它相当于 [A-Za-z_0-9] 。如果需要匹配完整的单词时,只需要使用加号修饰符即可。如下举例:
[Perl] 纯文本查看 复制代码 #!/usr/bin/perl
$_ = "-g_r0a_d";
if (/^\w+/) {
print "a full word matched.\n";
} else {
print "not match a word.\n";
}
$_ = "g_r0a_d";
if (/^\w+/) {
print "a full word matched.\n";
} else {
print "not match a word.\n";
}
运行输出:# ./wmatch.pl
not match a word.
a full word matched. 上面程序中在匹配模式里,脱字符 ^ 是需要的,否则匹配模式在遇到开始的连字符 '-' 时,发现不匹配 \w ,那么它会往后继续比较,直到可能找到匹配为止。
\b 用来匹配单词边界。我们经常会用 /\b单词\b/ 这种形式严格的匹配一个单词。不然,我们可能在对众多单词搜索时,会找出许多匹配结果,比如我们只想搜索 'won' 这个短语,但如果不确定一下单词边界,那么 "wonderful" ,"wonder",“wondering" 这些单词都因为包含了 "won" 而产生匹配。所以,假如使用 \bwon\b 时, 只会严格的匹配 "won" ,而不会找出包含它的其他单词。考虑下面测试代码:
[Perl] 纯文本查看 复制代码 #!/usr/bin/perl
$_ = "wonderful";
if (/\bwon/) {
print "match\n";
} else {
print "not match\n";
}
$_ = "wonder";
if (/\bwon/) {
print "match\n";
} else {
print "not match\n";
}
$_ = "wonderful";
if (/\bwoner\b/) {
print "match\n";
} else {
print "not match\n";
}
$_ = "wonderful";
if (/\bwonderful\b/) {
print "match\n";
} else {
print "not match\n";
}
运行输出:# ./bmatch.pl
match
match
not match
match
\W 表示非单字匹配,它和 [^A-Za-z_0-9] 的效果相同。 |