kno*_*orv 11 regex unicode perl internationalization character-properties
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+$/);
}
Run Code Online (Sandbox Code Playgroud)
Can*_*ice 14
正则表达式中的字符类匹配字符而不是字节,并与Unicode属性数据库中指定的字符属性匹配.
\w
例如,可用于匹配日语表意文字.
所以看起来你的问题的答案是肯定的.
但是,您可能希望使用该\p{}
构造直接访问特定的Unicode字符属性.您可以使用\p{L}
(或更短\pL
)字母和\pN
数字,并且更自信地获得您想要的内容.
tch*_*ist 11
是的,不是.
如果你想要所有的字母数字,你想要的[\p{Alphabetic}\p{GC=Number}]
.在\w
同时包含比这更少.它特别排除任何\pN
其不是\p{Nd}
也不\p{Nl}
一样,上标,下标,和分数.那些是\p{GC=Other_Number}
,并且不包括在内\w
.
因为不像大多数正则表达式系统,Perl,以符合要求1.2A,"兼容性属性"从UTS#Unicode的正则表达式18,那么假设你有Unicode字符串,一个\w
在正则表达式有任何以下四种性质的任何单码点相匹配:
\p{GC=Alphabetic}
\p{GC=Mark}
\p{GC=Connector_Punctuation}
\p{GC=Decimal_Number}
上面的数字4可以用以下任何方式表示,它们都被认为是等价的:
\p{Digit}
\p{General_Category=Decimal_Number}
\p{GC=Decimal_Number}
\p{Decimal_Number}
\p{Nd}
\p{Numeric_Type=Decimal}
\p{Nt=De}
注意与... \p{Digit}
不一样\p{Numeric_Type=Digit}
.例如,代码点B2,SUPERSCRIPT TWO,只有\p{Numeric_Type=Digit}
属性而不是普通的\p{Digit}
.那是因为它被认为是\p{Other_Number}
或\p{No}
.但是,它确实具有\p{Numeric_Value=2}
您想象的属性.
这真的是上面的第1点\p{Alphabetic}
,这给人们带来了最大的麻烦.那是因为他们经常错误地认为它与\p{Letter}
(\pL
)有某种程度的相同,但事实并非如此.
字母表包含的内容远远不止\p{Other_Alphabetic}
于此,所有这些都归因于属性,因为这又包括一些但不是全部\p{GC=Mark}
,所有\p{Lowercase}
(\p{GC=Ll}
因为它添加的不同\p{Other_Lowercase}
)和所有\p{Uppercase}
(\p{GC=Lu}
因为它添加的不同\p{Other_Uppercase}
) .
这就是它\p{GC=Letter_Number}
如罗马数字以及所有带圆圈的字母所带来的类型\p{Other_Symbol}
和类型\p{Block=Enclosed_Alphanumerics}
.
你不高兴我们开始使用\w
吗?:)
归档时间: |
|
查看次数: |
10979 次 |
最近记录: |