的含義根據該文檔關於perl的 W
\ W [3]匹配一個 「字」 的字符(字母數字加上 「_」,加 其他連接器標點字符加的Unicode引號)
我不明白什麼是「加上其他連接器標點符號加上Unicode標記」,該文檔似乎沒有說。什麼是\w
真的?
的含義根據該文檔關於perl的 W
\ W [3]匹配一個 「字」 的字符(字母數字加上 「_」,加 其他連接器標點字符加的Unicode引號)
我不明白什麼是「加上其他連接器標點符號加上Unicode標記」,該文檔似乎沒有說。什麼是\w
真的?
有以Unicode 9.0.0 119821個匹配字符(包括在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
字符)。您的報價是perldoc perlre
。相應的腳註表示:
它說:
甲
\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
匹配任何字符,其一般類別爲「標記」,並\p{Pc}
匹配它的基本類別是「連接符標點」任何字符。
有關這些類別中的字符的完整列表,我將不得不推遲到Unicode。
嗨@ikegami。 「unichars」在哪裏?我無法使用apt進行安裝。然後我下載Unicode :: Tussle,有一個unichars腳本。但是'unichars -a -u'\ w''不起作用 – user15964
該文檔已修復爲blead:https://perl5.git.perl.org/perl.git/commitdiff/9b79e9e3431d11e79a4f85268f70130b7b4369f6 – melpomene
@ user15964,你是什麼意思是「不起作用」?請記住'unichars'可以很慢,特別是'-a'和'-u'。它確實將regex參數應用於每個可能的Unicode字符0x110000。 – ikegami