Perl的\w
是否匹配Unicode标准中定义的所有字母数字字符?
例如,\w
是否匹配所有(比如说)中文和俄语字母数字字符?
我编写了一个简单的测试脚本(见下文),表明\w
确实符合我测试过的非ASCII字母数字字符的预期匹配。但是测试显然远非全面。
#!/usr/bin/perl
use utf8;
binmode(STDOUT, ':utf8');
my @ok;
$ok[0] = "abcdefghijklmnopqrstuvwxyz";
$ok[1] = "éèëáàåäöčśžłíżńęøáýąóæšćôı";
$ok[2] = "şźüęłâi̇ółńśłŕíáυσνχατςęςη";
$ok[3] = "τσιαιγολοχβςανنيرحبالтераб";
$ok[4] = "иневоаслкłјиневоцедањеволс";
$ok[5] = "рглсывызтоμςόκιναςόγο";
foreach my $ok (@ok) {
die unless ($ok =~ /^\w+$/);
}
\w
仅匹配 ASCII 单词字符。 - Anomie\w
的安全等效项是使用\p{Alnum}
。 - cjm\w
其实是\p{Word}
。\p{Alnum}
缺少下划线。 - ikegami\pL
来表示\p{Alphabetic}
。它们实际上是非常不同的。自Unicode 6以来,有1006个代码点具有字母属性但缺少GC = Letter属性。 - tchrist