根据文件
\ w [3]匹配"字"字符(字母数字加" _",加号 其他连接符标点符号加上Unicode标记)
我不明白什么是"以及其他连接符标点字符加上Unicode标记",文档似乎没有说。什么是\w
真的?
答案 0 :(得分:5)
Unicode 9.0.0中包含119,821个匹配字符(包含在Perl 5.26.0中):
$ unichars -a -u '\w' | wc -l
119821
您可以使用unichars
列出与属性匹配的字符,您可以使用uniprops
列出与字符匹配的属性。两者均由Unicode::Tussle提供。
perluniprops个文档\p
,\w
是\p{XPosixWord}
[1] 的缩写,所以这是一个应该查阅的文档了解有关\w
和其他属性的更多信息。
最新的perluniprops [2] 文件表明\w
包含以下属性的并集:
XPosixWord
:
XPosixAlnum
:字母和小数位数。
Alphabetic
Decimal_Number
:十进制数字。Mark
Connector_Punctuation
Join_Control
验证
$ diff -u \
<( unichars -a -u '\w' ) \
<( unichars -a -u '[\p{Alphabetic}\p{Decimal_Number}\p{Mark}\p{Connector_Punctuation}\p{Join_Control}]' ) \
&& echo "No difference."
No difference.
详细说明:
XPosixWord
:
XPosixAlnum
:字母和小数位数。
Alphabetic
:
Uppercase
:
Uppercase_Letter
(Lu
)Other_Uppercase
[3] Lowercase
:
Lowercase_Letter
(Ll
)Other_Lowercase
[3] Titlecase_Letter
(Lt
)Modifier_Letter
(Lm
)Other_Letter
(Lo
)Letter_Number
(Nl
)Other_Alphabetic
[3] Decimal_Number
(Nd
):十进制数字。Mark
(M
):
Spacing_Mark
(Mc
)Enclosing_Mark
(Me
)Nonspacing_Mark
(Mn
)Connector_Punctuation
(Pc
)Join_Control
/u
或use feature qw( unicode_strings );
。XPosixWord
的版本(因为在5.18中添加了Join_Control
个字符)。答案 1 :(得分:3)
您的引用来自perldoc perlre
。相应的脚注说:
- [3]
有关详细信息,请参阅Backslash sequences in perlrecharclass。
其中说:
\w
匹配单个字母数字字符(字母字符或十进制数字);或连接标点字符,例如下划线(“_”);或者是一个附加在其中一个上面的“标记”字符(如某种口音)。它与整个单词不匹配。要匹配整个单词,请使用\w+
。这与匹配英文单词不同,但在ASCII范围内,它与Perl标识符字符串相同。
它还说(如果Unicode规则生效),\w
相当于\p{Word}
。 perldoc perluniprops
:
\p{Word} \p{XPosixWord}
即。 \p{Word}
是\p{XPosixWord}
的别名。
\p{XPosixWord} \w, including beyond ASCII; = \p{Alnum} + \pM + \p{Pc} (Short: \p{Word})
即。 \p{XPosixWord}
是\p{Alnum}
,\pM
和\p{Pc}
的联合。
此处\p{Alnum}
匹配任何“字母和(十进制)数字”字符,\pM
匹配任何一般类别为“Mark”的字符,\p{Pc}
匹配任何一般类别为“连接器标点符号”的字符。
对于这些类别中的完整字符列表,我将不得不遵循Unicode。