Поделиться через


Классы знаков

Обновлен: Ноябрь 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-схем имеют аналогичную поддержку вычитания классов знаков.

См. также

Ссылки

GetUnicodeCategory

Параметры регулярных выражений

Другие ресурсы

Элементы языка регулярных выражений