Классы знаков
Обновлен: Ноябрь 2007
Класс знаков представляет собой набор знаков, который можно сопоставить с входной строкой. Буквенные знаки, escape-знаки и классы знаков можно объединять для создания шаблона регулярного выражения.
Классы знаков определяют наборы знаков. Некоторые классы знаков эквивалентны для одного или нескольких значений общих категорий Юникода или блоков Юникода. Общая категория Юникода определяет знак в его широком понятии, т.е. знаком может выступать буква, десятичная цифра, разделитель, математический символ, знак препинания и т.д. Например, к общей категории Lu относятся "Буква, Прописные буквы", а категория Sm представляет "Математический Символ". Дополнительные сведения см. в разделе Поддерживаемые общие категории Юникода.
Блок юникода — это обозначенный диапазон кодовых точек Юникода Платформа .NET Framework предоставляет набор именованных блоков, полученных от имен блоков в Юникоде. Например, платформа .NET Framework предоставляет именованный блок IsBasicLatin, который соответствует блоку Юникода Basic Latin и содержит знаки в диапазоне от U+0000 до U+007f. Дополнительные сведения см. в разделе Поддерживаемые именованные блоки.
Платформа .NET Framework поддерживает выражения вычитания в классах знаков, которые позволяют в результате исключения одного класса знаков из другого класса знаков определить набор знаков. Дополнительные сведения см. в разделе Вычитание класса знаков.
Синтаксис класса знаков
В следующей таблице перечислены классы знаков и их синтаксис.
Класс знаков |
Описание |
---|---|
[группа_знаков] |
Группа положительных знаков. Соответствует всем знакам в указанной группе знаков. Группа знаков состоит из одного или нескольких буквенных знаков, escape-знаков, диапазонов знаков или сцепленных классов знаков. Например, чтобы указать все гласные, используйте код [aeiou].. Чтобы указать все знаки препинания и десятичные числа используйте [\p{P}\d]. |
[^группа знаков] |
Группа отрицательных знаков. Соответствует всем знакам, которые отсутствуют в указанной группе знаков. Группа знаков состоит из одного или нескольких буквенных знаков, escape-знаков, диапазонов знаков или сцепленных классов знаков. Начальный знак (^) является обязательным и указывает на то, что группа знаков представляет собой группу отрицательных знаков, а не положительных. Например, чтобы указать все знаки, кроме гласных, используйте код [^aeiou]. . Чтобы задать все знаки, кроме знаков препинания и десятичных чисел, используйте [^\p{P}\d]. |
[первыйЗнак-последнийЗнак] |
Диапазон знаков. Определяет все знаки в диапазоне знаков. Диапазон знаков — это непрерывная последовательность знаков, которая задается указанием первого и последнего знака в последовательности и дефиса между ними. Два знака являются непрерывными, если они имеют соседние кодовых точки в Юникоде. Два или более диапазона знаков могут быть сцеплены. Например, чтобы задать диапазон десятичных цифр от "0" до "9", диапазон строчных букв от "a" до "f" и диапазон прописных букв от "A" до "F" используйте [0-9a-fA-F]. |
. |
Точка. Соответствует любому знаку, кроме \n. Если изменение происходит при помощи параметра Singleline, точка соответствует любому знаку. Дополнительные сведения см. в разделе Параметры регулярных выражений. Обратите внимание, что точка в положительной или отрицательной группе знаков (знак в квадратных скобках) рассматривается как изменяемый буквенный знак, а не как класс знаков. |
\p{имя} |
Соответствует всем знакам в общей категории Юникода или в именованном блоке, заданным в параметре имя (например, Ll, Nd, Z, IsGreek и IsBoxDrawing). |
\P{имя} |
Соответствует всем знакам, отсутствующим в общей категории Юникода или в именованном блоке, указанном в параметре имя. |
\w |
Соответствует любому алфавитно-цифровому знаку. Эквивалентен общим категориям Юникода [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]. Если с помощью параметра ECMAScript задано поведение, совместимое с ECMAScript, то \w эквивалентно [a-zA-Z_0-9]. |
\W |
Соответствует любому знаку, не являющемуся цифрой или буквой. Эквивалентен общим категориям Юникода [^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]. Если с помощью параметра ECMAScript задано поведение, совместимое с ECMAScript, то \W эквивалентно [^a-zA-Z_0-9]. |
\s |
Соответствует любому знаку пробела. Эквивалентно escape-последовательностям и общим категориям Юникода [\f\n\r\t\v\x85\p{Z}]. Если с помощью параметра ECMAScript задано поведение, совместимое с ECMAScript, то \s эквивалентно [ \f\n\r\t\v]. |
\S |
Соответствует любому знаку, не являющемуся пробелом. Эквивалентно escape-последовательностям и общим категориям Юникода [^\f\n\r\t\v\x85\p{Z}]. Если с помощью параметра ECMAScript задано поведение, совместимое с ECMAScript, то \S эквивалентно [^ \f\n\r\t\v]. |
\d |
Соответствует любой десятичной цифре. Эквивалентно параметру ECMAScript \p{Nd} для знаков Юникода и [0-9] для других знаков (используется поведение ECMAScript). |
\D |
Соответствует любому знаку, не являющемуся цифрой. Эквивалентно параметру ECMAScript \P{Nd} для знаков Юникода и [^0-9] для других знаков (используется поведение ECMAScript). |
Поддерживаемые общие категории Юникода
Юникод определяет общие категории и описания, приведенные в следующей таблице. Дополнительные сведения содержатся в подразделах "Форматирование UCD-файла" и "Значения общих категорий" в разделе База данных символов Юникода.
Категория |
Описание |
---|---|
Lu |
Буква: прописные буквы |
Ll |
Буква: строчные буквы |
Lt |
Буква: заглавный регистр |
Lm |
Буква: модификатор |
Lo |
Буква: другие |
Mn |
Метка: безразрывная |
Mc |
Метка: комбинированная |
Me |
Метка: вложенная |
Nd |
Число: десятичная цифра |
Nl |
Число: буква |
No |
Число: другое |
Pc |
Пунктуация: соединительные знаки пунктуации |
Pd |
Пунктуация: тире |
Ps |
Пунктуация: открывающий знак пунктуации |
Pe |
Пунктуация: закрывающий знак пунктуации |
Pi |
Пунктуация: начало цитаты (может вести себя как Ps или Pe, в зависимости от использования) |
Pf |
Пунктуация: конец цитаты (может вести себя как Ps или Pe, в зависимости от использования) |
Po |
Пунктуация: другие знаки пунктуации |
Sm |
Символ: математический символ |
Sc |
Символ: символ денежной единицы |
Sk |
Символ: модификатор |
So |
Символ: другие |
Zs |
Разделитель: пробел |
Zl |
Разделитель: строка |
Zp |
Разделитель: абзац |
Cc |
Другое: управляющий символ |
Cf |
Другое: формат |
Cs |
Другое: заменяющий символ |
Co |
Другое: индивидуальное использование |
Cn |
Другое: не назначенные символы (ни один символ не имеет этого свойства) |
Платформа .NET Framework предоставляет дополнительные категории, которые представляют собой набор категорий знаков Юникода, как показано в следующей таблице.
Категория |
Представление |
---|---|
C |
(Все управляющие символы) Cc, CfCs, Co и Cn. |
L |
(Все буквы) Lu, LlLt, Lm и Lo. |
M |
(Все диакритические знаки) MnMc и Me. |
N |
(Все числа) NdNl и No. |
P |
(Все знаки пунктуации) Pc, Pd, Ps, Pe, Pi, Pf, и Po. |
S |
(Все символы) Sm, ScSk и So. |
Z |
(Все разделители) ZsZl и Zp. |
Поддерживаемые именованные блоки
Платформа .NET Framework предоставляет именованные блоки, перечисленные в следующей таблице. Набор поддерживаемых именованных блоков составлен на основе Юникода версии 4.0 и Perl версии 5.6.
Диапазон кодовых точек |
Имя блока |
---|---|
0000 - 007F |
IsBasicLatin |
0080 - 00FF |
IsLatin-1Supplement |
0100 - 017F |
IsLatinExtended-A |
0180 - 024F |
IsLatinExtended-B |
0250 - 02AF |
IsIPAExtensions |
02B0 - 02FF |
IsSpacingModifierLetters |
0300 - 036F |
IsCombiningDiacriticalMarks |
0370 - 03FF |
IsGreek или IsGreekandCoptic |
0400 - 04FF |
IsCyrillic |
0500 - 052F |
IsCyrillicSupplement |
0530 - 058F |
IsArmenian |
0590 - 05FF |
IsHebrew |
0600 - 06FF |
IsArabic |
0700 - 074F |
IsSyriac |
0780 - 07BF |
IsThaana |
097F - 0900 |
IsDevanagari |
0980 - 09FF |
IsBengali |
0A00 - 0A7F |
IsGurmukhi |
0A80 - 0AFF |
IsGujarati |
0B00 - 0B7F |
IsOriya |
0B80 - 0BFF |
IsTamil |
0C00 - 0C7F |
IsTelugu |
0C80 - 0CFF |
IsKannada |
0D00 - 0D7F |
IsMalayalam |
0D80 - 0DFF |
IsSinhala |
0E00 - 0E7F |
IsThai |
0E80 - 0EFF |
IsLao |
0F00 - 0FFF |
IsTibetan |
1000 - 109F |
IsMyanmar |
10A0 - 10FF |
IsGeorgian |
1100 - 11FF |
IsHangulJamo |
1200 - 137F |
IsEthiopic |
13A0 - 13FF |
IsCherokee |
1400 - 167F |
IsUnifiedCanadianAboriginalSyllabics |
1680 - 169F |
IsOgham |
16A0 - 16FF |
IsRunic |
1700 - 171F |
IsTagalog |
1720 - 173F |
IsHanunoo |
1740 - 175F |
IsBuhid |
1760 - 177F |
IsTagbanwa |
1780 - 17FF |
IsKhmer |
1800 - 18AF |
IsMongolian |
1900 - 194F |
IsLimbu |
1950 - 197F |
IsTaiLe |
19E0 - 19FF |
IsKhmerSymbols |
1D00 - 1D7F |
IsPhoneticExtensions |
1E00 - 1EFF |
IsLatinExtendedAdditional |
1F00 - 1FFF |
IsGreekExtended |
2000 - 206F |
IsGeneralPunctuation |
2070 - 209F |
IsSuperscriptsandSubscripts |
20A0 - 20CF |
IsCurrencySymbols |
20D0 - 20FF |
IsCombiningDiacriticalMarksforSymbols или IsCombiningMarksforSymbols |
2100 - 214F |
IsLetterlikeSymbols |
2150 - 218F |
IsNumberForms |
2190 - 21FF |
IsArrows |
2200 - 22FF |
IsMathematicalOperators |
2300 - 23FF |
IsMiscellaneousTechnical |
2400 - 243F |
IsControlPictures |
245F - 2440 |
IsOpticalCharacterRecognition |
2460 - 24FF |
IsEnclosedAlphanumerics |
257F - 2500 |
IsBoxDrawing |
2580 - 259F |
IsBlockElements |
25A0 - 25FF |
IsGeometricShapes |
2600 - 26FF |
IsMiscellaneousSymbols |
2700 - 27BF |
IsDingbats |
27C0 - 27EF |
IsMiscellaneousMathematicalSymbols-A |
27F0 - 27FF |
IsSupplementalArrows-A |
2800 - 28FF |
IsBraillePatterns |
2900 - 297F |
IsSupplementalArrows-B |
2980 - 29FF |
IsMiscellaneousMathematicalSymbols-B |
2A00 - 2AFF |
IsSupplementalMathematicalOperators |
2B00 - 2BFF |
IsMiscellaneousSymbolsandArrows |
2E80 - 2EFF |
IsCJKRadicalsSupplement |
2F00 - 2FDF |
IsKangxiRadicals |
2FF0 - 2FFF |
IsIdeographicDescriptionCharacters |
3000 - 303F |
IsCJKSymbolsandPunctuation |
3040 - 309F |
IsHiragana |
30A0 - 30FF |
IsKatakana |
3100 - 312F |
IsBopomofo |
3130 - 318F |
IsHangulCompatibilityJamo |
3190 - 319F |
IsKanbun |
31A0 - 31BF |
IsBopomofoExtended |
31F0 - 31FF |
IsKatakanaPhoneticExtensions |
3200 - 32FF |
IsEnclosedCJKLettersandMonths |
3300 - 33FF |
IsCJKCompatibility |
3400 - 4DBF |
IsCJKUnifiedIdeographsExtensionA |
4DC0 - 4DFF |
IsYijingHexagramSymbols |
4E00 - 9FFF |
IsCJKUnifiedIdeographs |
A000 - A48F |
IsYiSyllables |
A490 - A4CF |
IsYiRadicals |
AC00 - D7AF |
IsHangulSyllables |
D800 - DB7F |
IsHighSurrogates |
DB80 - DBFF |
IsHighPrivateUseSurrogates |
DC00 - DFFF |
IsLowSurrogates |
E000 - F8FF |
IsPrivateUse |
F900 - FAFF |
IsPrivateUseArea |
FB00 - FB4F |
IsCJKCompatibilityIdeographs |
FB50 - FDFF |
IsAlphabeticPresentationForms |
FE00 - FE0F |
IsArabicPresentationForms-A |
FE20 - FE2F |
IsVariationSelectors |
FE30 - FE4F |
IsCombiningHalfMarks |
FE50 - FE6F |
IsCJKCompatibilityForms |
FE70 - FEFF |
IsSmallFormVariants |
FF00 - FFEF |
IsArabicPresentationForms-B |
FFF0 - FFFF |
IsHalfwidthandFullwidthForms |
Вычитание класса знаков
Класс знаков определяет набор знаков. Результатом вычитания класса знаков является набор знаков, полученный в результате исключения одного класса знаков из другого класса знаков.
Выражение вычитания класса знаков имеет следующий вид:
[базовая_группа-[исключенная_группа]]
Квадратные скобки ([]) и дефис (-) являются обязательными. Компонент базовая_группа представляет собой положительную или отрицательную группу знаков как описано в таблице Синтаксис класса знаков. Компонент исключенная_группа — это другая положительная или отрицательная группа знаков, или другое выражение вычитания класса знаков (то есть можно вкладывать выражения вычитания класса знаков друг в друга).
Например, предположим, что имеется базовая группа, состоящая из диапазона знаков от "а0" до "z". Чтобы задать набор знаков, состоящий из базовой группы за исключением знака "m", используйте [a-z-[m]]. Чтобы задать набор знаков, состоящий из базовой группы за исключением набора знаков "d", "j", и "p", используйте [a-z-[djp]]. Чтобы определить набор знаков, состоящий из базовой группы за исключением диапазона знаков от "m" до "p", используйте [a-z-[m-p]].
Рассмотрим вложенные выражения вычитания классов знаков, [a-z-[d-w-[m-o]]]. Вычисление выражения начинается из самого внутреннего диапазона знаков. Сначала, диапазон знаков от "m" до "o" вычитается из диапазона знаков от "d" до "w", в результате чего получаем набор знаков от "d" до "i" и от "p" до "w". Затем этот набор вычитается из диапазона знаков от "a" до "z", в результате получается набор знаков [abcmnoxyz].
Можно использовать любой класс знаков при вычитании класса знаков. Чтобы задать набор знаков, состоящий из всех знаков Юникода от "\u0000" до "\uFFFF", за исключением пробела (\s), знаков препинания в общей категории (\p{P}), знаков в именованном блоке IsGreek (\p{IsGreek}) и управляющего символа юникода NEXT LINE (\x85), используйте [\u0000-\uFFFF-[\s\p{P}\p{IsGreek}\x85]].
Выберите классы знаков для выражения вычитания класса знаков, которое возвратит полезные результаты. Избегайте выражений, в результате которых будет возвращен пустой набор знаков, который не может ничему соответствовать, или выражений, эквивалентных исходной базовой группе. Например, пустой набор является результатом выражения [\p{IsBasicLatin}-[\x00-\x7F]], которое вычитает все символы из общей категории IsBasicLatin. Аналогично, результатом выражения [a-z-[0-9]] является исходная базовая группа. Это происходит из-за того, что базовая группа, которая является диапазоном букв от "a" до "z", не содержит знаков исключаемой группы, которая является диапазоном десятичных цифр от "0" до "9".
Обратите внимание, что регулярные выражения XML-схем имеют аналогичную поддержку вычитания классов знаков.
См. также
Ссылки
Параметры регулярных выражений