Да и нет.
Если вам нужны все буквенно-цифровые символы, вам нужно [\p{Alphabetic}\p{GC=Number}]
.\w
содержит больше и меньше этого.В частности, он исключает любые \pN
, которые не являются \p{Nd}
и \p{Nl}
, такие как верхние индексы, индексы и дроби.Это \p{GC=Other_Number}
и они не включены в \w
.
Поскольку в отличие от большинства систем регулярных выражений, Perl соответствует Требованию 1.2a, «Свойства совместимости» из UTS #18 в регулярных выражениях Unicode , затем при условии, что у вас есть строки Unicode, a \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
?:)