Классы символов в регулярных выраженияхCharacter classes in regular expressions

Класс символов определяет набор символов, любой из которых может присутствовать во входной строке для успешного сопоставления.A character class defines a set of characters, any one of which can occur in an input string for a match to succeed. Язык регулярных выражений в .NET поддерживает следующие классы символов:The regular expression language in .NET supports the following character classes:

  • Положительные группы символов.Positive character groups. Входная строка должна содержать символ из указанного набора.A character in the input string must match one of a specified set of characters. Дополнительные сведения см. в разделе Положительная группа символов.For more information, see Positive Character Group.

  • Отрицательные группы символов.Negative character groups. Входная строка не должна содержать символ из указанного набора.A character in the input string must not match one of a specified set of characters. Дополнительные сведения см. в разделе Отрицательная группа символов.For more information, see Negative Character Group.

  • Любой символ.Any character. Символ . (точка) в регулярных выражениях является подстановочным знаком, который соответствует всем символам, кроме \n.The . (dot or period) character in a regular expression is a wildcard character that matches any character except \n. Дополнительные сведения см. в разделе Любой символ.For more information, see Any Character.

  • Общая категория Юникода или именованный блок.A general Unicode category or named block. Входная строка должна содержать символ из определенной категории Юникода или непрерывного диапазона символов Юникода.A character in the input string must be a member of a particular Unicode category or must fall within a contiguous range of Unicode characters for a match to succeed. Дополнительные сведения см. в разделе Категория Юникода или блок Юникода.For more information, see Unicode Category or Unicode Block.

  • Отрицательная общая категория Юникода или именованный блок.A negative general Unicode category or named block. Входная строка не должна содержать символ из определенной категории Юникода или непрерывного диапазона символов Юникода.A character in the input string must not be a member of a particular Unicode category or must not fall within a contiguous range of Unicode characters for a match to succeed. Дополнительные сведения см. в разделе Отрицательная категория Юникода или блок Юникода.For more information, see Negative Unicode Category or Unicode Block.

  • Словообразующий символ.A word character. Входная строка может содержать символ, относящийся к любой категории Юникода, соответствующей символам в словах.A character in the input string can belong to any of the Unicode categories that are appropriate for characters in words. Дополнительные сведения см. в разделе Словообразующий символ.For more information, see Word Character.

  • Несловообразующий символ.A non-word character. Входная строка может содержать символ, относящийся к любой категории Юникода, не соответствующей словообразующим символам.A character in the input string can belong to any Unicode category that is not a word character. Дополнительные сведения см. в разделе Несловообразующий символ.For more information, see Non-Word Character.

  • Символ пробела.A white-space character. Входная строка может содержать любой разделитель Юникода, а также любой из множества управляющих символов.A character in the input string can be any Unicode separator character, as well as any one of a number of control characters. Дополнительные сведения см. в разделе Символ пробела.For more information, see White-Space Character.

  • Символ, не являющийся пробелом.A non-white-space character. Входная строка может содержать любой символ, кроме пробела.A character in the input string can be any character that is not a white-space character. Дополнительные сведения см. в разделе Символ, не являющийся пробелом.For more information, see Non-White-Space Character.

  • Десятичная цифра.A decimal digit. Входная строка может содержать любой набор знаков, классифицируемых как десятичные цифры Юникода.A character in the input string can be any of a number of characters classified as Unicode decimal digits. Дополнительные сведения см. в разделе Десятичная цифра.For more information, see Decimal Digit Character.

  • Недесятичная цифра.A non-decimal digit. Входная строка может содержать любой символ, кроме десятичных цифр Юникода.A character in the input string can be anything other than a Unicode decimal digit. Дополнительные сведения см. в разделе Десятичная цифра.For more information, see Decimal Digit Character.

Платформа .NET поддерживает выражения вычитания в классах знаков, которые позволяют в результате исключения одного класса знаков из другого класса знаков определить набор знаков..NET supports character class subtraction expressions, which enables you to define a set of characters as the result of excluding one character class from another character class. Дополнительные сведения см. в разделе Вычитание класса знаков.For more information, see Character Class Subtraction.

Примечание

Классы символов, которые сопоставляют символы по категориям, например \w, для соответствия символов слов или \p{} для соответствия категории Юникод, используют класс CharUnicodeInfo для получения сведений о категориях символов.Character classes that match characters by category, such as \w to match word characters or \p{} to match a Unicode category, rely on the CharUnicodeInfo class to provide information about character categories. Начиная с .NET Framework 4.6.2 категории символов основаны на Стандарте Юникода, версия 8.0.0.Starting with the .NET Framework 4.6.2, character categories are based on The Unicode Standard, Version 8.0.0. В версиях .NET Framework с 4 по 4.6.1 они основаны на Стандарте Юникода, версия 6.3.0.In the .NET Framework 4 through the .NET Framework 4.6.1, they are based on The Unicode Standard, Version 6.3.0.

Положительная группа символов: [ ]Positive character group: [ ]

Положительная группа символов задает список символов, один из которых должен присутствовать во входной строке для успешного сопоставления.A positive character group specifies a list of characters, any one of which may appear in an input string for a match to occur. Символы можно задать по отдельности или в виде диапазона.This list of characters may be specified individually, as a range, or both.

Синтаксис для указания списка отдельных символов выглядит следующим образом:The syntax for specifying a list of individual characters is as follows:

[*character_group*]

Здесь character_group — это список отдельных символов, которые могут присутствовать во входной строке для успешного сопоставления.where character_group is a list of the individual characters that can appear in the input string for a match to succeed. character_group может включать в себя любое сочетание литеральных символов, escape-символов или классов символов.character_group can consist of any combination of one or more literal characters, escape characters, or character classes.

Синтаксис для указания диапазона символов выглядит следующим образом:The syntax for specifying a range of characters is as follows:

[firstCharacter-lastCharacter]

Здесь firstCharacter — это символ, с которого начинается диапазон, а lastCharacter — символ, которым он заканчивается.where firstCharacter is the character that begins the range and lastCharacter is the character that ends the range. Диапазон символов — это непрерывная последовательность знаков, которая задается указанием первого и последнего знака в последовательности и дефиса между ними.A character range is a contiguous series of characters defined by specifying the first character in the series, a hyphen (-), and then the last character in the series. Два знака являются смежными, если они имеют соседние кодовые точки в Юникоде.Two characters are contiguous if they have adjacent Unicode code points. firstCharacter должен быть символом с самой нижней кодовой точкой, а lastCharacter должен быть символом с самой высокой кодовой точкой.firstCharacter must be the character with the lower code point, and lastCharacter must be the character with the higher code point.

Примечание

Так как группа положительных символов может включать набор символов и диапазон символов, дефис (-) всегда интерпретируется как разделитель диапазонов, если только он не является первым или последним символом группы.Because a positive character group can include both a set of characters and a character range, a hyphen character (-) is always interpreted as the range separator unless it is the first or last character of the group.

В следующей таблице перечислены некоторые распространенные шаблоны регулярных выражений, содержащие классы положительных символов.Some common regular expression patterns that contain positive character classes are listed in the following table.

ШаблонPattern ОписаниеDescription
[aeiou] Соответствует всем гласным.Match all vowels.
[\p{P}\d] Соответствует всем знакам препинания и десятичным цифрам.Match all punctuation and decimal digit characters.
[\s\p{P}] Соответствует всем символам пробела и знакам препинания.Match all white space and punctuation.

В следующем примере определена положительная группа знаков, которая содержит символы "a" и "e", таким образом, чтобы входная строка содержала слова grey или gray и еще одно слово.The following example defines a positive character group that contains the characters "a" and "e" so that the input string must contain the words "grey" or "gray" followed by another word for a match to occur.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"gr[ae]y\s\S+?[\s\p{P}]";
      string input = "The gray wolf jumped over the grey wall.";
      MatchCollection matches = Regex.Matches(input, pattern);
      foreach (Match match in matches)
         Console.WriteLine($"'{match.Value}'");
   }
}
// The example displays the following output:
//       'gray wolf '
//       'grey wall.'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "gr[ae]y\s\S+?[\s\p{P}]"
      Dim input As String = "The gray wolf jumped over the grey wall."
      Dim matches As MatchCollection = Regex.Matches(input, pattern)
      For Each match As Match In matches
         Console.WriteLine($"'{match.Value}'")
      Next
   End Sub
End Module
' The example displays the following output:
'       'gray wolf '
'       'grey wall.'

Регулярное выражение gr[ae]y\s\S+?[\s|\p{P}] определяется следующим образом:The regular expression gr[ae]y\s\S+?[\s|\p{P}] is defined as follows:

ШаблонPattern ОписаниеDescription
gr Соответствует буквенным символам "gr".Match the literal characters "gr".
[ae] Соответствует букве "a" или "e".Match either an "a" or an "e".
y\s Соответствует буквенному символу "y", за которым следует пробел.Match the literal character "y" followed by a white-space character.
\S+? Соответствует одному или нескольким символам, отличным от пробела.Match one or more non-white-space characters, but as few as possible.
[\s\p{P}] Соответствует символу пробела или знаку препинания.Match either a white-space character or a punctuation mark.

В следующем примере выделяются слова, начинающиеся с любой прописной буквы.The following example matches words that begin with any capital letter. Вложенное выражение [A-Z] представляет диапазон прописных букв от A до Z.It uses the subexpression [A-Z] to represent the range of capital letters from A to Z.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"\b[A-Z]\w*\b";
      string input = "A city Albany Zulu maritime Marseilles";
      foreach (Match match in Regex.Matches(input, pattern))
         Console.WriteLine(match.Value);
   }
}
// The example displays the following output:
//       A
//       Albany
//       Zulu
//       Marseilles
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "\b[A-Z]\w*\b"
      Dim input As String = "A city Albany Zulu maritime Marseilles"
      For Each match As Match In Regex.Matches(input, pattern)
         Console.WriteLine(match.Value)
      Next
   End Sub
End Module

Определение регулярного выражения \b[A-Z]\w*\b показано в таблице ниже.The regular expression \b[A-Z]\w*\b is defined as shown in the following table.

ШаблонPattern ОписаниеDescription
\b Начало на границе слова.Start at a word boundary.
[A-Z] Соответствует любому символу верхнего регистра от А до Z.Match any uppercase character from A to Z.
\w* Совпадение с нулем или большим числом буквенных символов.Match zero or more word characters.
\b Соответствует границе слова.Match a word boundary.

Отрицательная группа символов: [^]Negative character group: [^]

Отрицательная группа символов задает список символов, которые не должны присутствовать во входной строке для успешного сопоставления.A negative character group specifies a list of characters that must not appear in an input string for a match to occur. Символы можно задать по отдельности или в виде диапазона.The list of characters may be specified individually, as a range, or both.

Синтаксис для указания списка отдельных символов выглядит следующим образом:The syntax for specifying a list of individual characters is as follows:

[*^character_group*]

Здесь character_group — это список отдельных символов, которые не могут присутствовать во входной строке для успешного сопоставления.where character_group is a list of the individual characters that cannot appear in the input string for a match to succeed. character_group может включать в себя любое сочетание литеральных символов, escape-символов или классов символов.character_group can consist of any combination of one or more literal characters, escape characters, or character classes.

Синтаксис для указания диапазона символов выглядит следующим образом:The syntax for specifying a range of characters is as follows:

[^*firstCharacter*-*lastCharacter*]

Здесь firstCharacter — это символ, с которого начинается диапазон, а lastCharacter — символ, которым он заканчивается.where firstCharacter is the character that begins the range and lastCharacter is the character that ends the range. Диапазон символов — это непрерывная последовательность знаков, которая задается указанием первого и последнего знака в последовательности и дефиса между ними.A character range is a contiguous series of characters defined by specifying the first character in the series, a hyphen (-), and then the last character in the series. Два знака являются смежными, если они имеют соседние кодовые точки в Юникоде.Two characters are contiguous if they have adjacent Unicode code points. firstCharacter должен быть символом с самой нижней кодовой точкой, а lastCharacter должен быть символом с самой высокой кодовой точкой.firstCharacter must be the character with the lower code point, and lastCharacter must be the character with the higher code point.

Примечание

Так как группа отрицательных символов может включать набор символов и диапазон символов, дефис (-) всегда интерпретируется как разделитель диапазонов, если только он не является первым или последним символом группы.Because a negative character group can include both a set of characters and a character range, a hyphen character (-) is always interpreted as the range separator unless it is the first or last character of the group.

Два или более диапазона знаков могут быть объединены.Two or more character ranges can be concatenated. Например, чтобы задать диапазон десятичных цифр от "0" до "9", диапазон строчных букв от "a" до "f" и диапазон прописных букв от "A" до "F" используйте строку [0-9a-fA-F].For example, to specify the range of decimal digits from "0" through "9", the range of lowercase letters from "a" through "f", and the range of uppercase letters from "A" through "F", use [0-9a-fA-F].

Начальный знак вставки (^) отрицательной группы символов является обязательным и указывает на то, что группа знаков является отрицательной, а не положительной.The leading caret character (^) in a negative character group is mandatory and indicates the character group is a negative character group instead of a positive character group.

Важно!

Отрицательная группа символов в больших шаблонах регулярных выражений не является утверждением нулевой ширины.A negative character group in a larger regular expression pattern is not a zero-width assertion. То есть после оценки отрицательной группы символов обработчик регулярных выражений перемещает один символ во входную строку.That is, after evaluating the negative character group, the regular expression engine advances one character in the input string.

В следующей таблице перечислены некоторые распространенные шаблоны регулярных выражений, содержащие отрицательные группы символов.Some common regular expression patterns that contain negative character groups are listed in the following table.

ШаблонPattern ОписаниеDescription
[^aeiou] Соответствует всем символам, кроме гласных.Match all characters except vowels.
[^\p{P}\d] Соответствует всем символам, кроме знаков препинания и десятичных цифр.Match all characters except punctuation and decimal digit characters.

Следующий пример соответствует любому слову, начинающемуся с символов "th", за которыми нет символа "o".The following example matches any word that begins with the characters "th" and is not followed by an "o".

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"\bth[^o]\w+\b";
      string input = "thought thing though them through thus thorough this";
      foreach (Match match in Regex.Matches(input, pattern))
         Console.WriteLine(match.Value);
   }
}
// The example displays the following output:
//       thing
//       them
//       through
//       thus
//       this
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "\bth[^o]\w+\b"
      Dim input As String = "thought thing though them through thus " + _
                            "thorough this"
      For Each match As Match In Regex.Matches(input, pattern)
         Console.WriteLine(match.Value)
      Next
   End Sub
End Module
' The example displays the following output:
'       thing
'       them
'       through
'       thus
'       this

Определение регулярного выражения \bth[^o]\w+\b показано в таблице ниже.The regular expression \bth[^o]\w+\b is defined as shown in the following table.

ШаблонPattern ОписаниеDescription
\b Начало на границе слова.Start at a word boundary.
th Соответствует буквенным символам "th".Match the literal characters "th".
[^o] Соответствует любому символу, отличающемуся от "o".Match any character that is not an "o".
\w+ Совпадение с одним или несколькими символами слова.Match one or more word characters.
\b Конец на границе слова.End at a word boundary.

Любой символ: .Any character: .

Символ точки (.) соответствует любому символу, кроме \n (символ перевода строки, \u000A), с использованием указанных ниже двух квалификаторов.The period character (.) matches any character except \n (the newline character, \u000A), with the following two qualifications:

  • Если шаблон регулярного выражения изменяется параметром RegexOptions.Singleline или если часть этого шаблона, содержащая класс символов ., изменяется параметром s, то . соответствует любому символу.If a regular expression pattern is modified by the RegexOptions.Singleline option, or if the portion of the pattern that contains the . character class is modified by the s option, . matches any character. Для получения дополнительной информации см. Параметры регулярных выражений.For more information, see Regular Expression Options.

    В следующем примере показано различное поведение класса символов . по умолчанию и с параметром RegexOptions.Singleline.The following example illustrates the different behavior of the . character class by default and with the RegexOptions.Singleline option. Регулярное выражение ^.+ начинается с начала строки и соответствует любому знаку.The regular expression ^.+ starts at the beginning of the string and matches every character. По умолчанию соответствие заканчивается в конце первой строки; шаблон регулярного выражения соответствует символу возврата каретки, \r или \u000D, но не соответствует \n.By default, the match ends at the end of the first line; the regular expression pattern matches the carriage return character, \r or \u000D, but it does not match \n. Поскольку параметр RegexOptions.Singleline интерпретирует всю входную строку как единую строку, он сопоставляет каждый символ в строке ввода, включая \n.Because the RegexOptions.Singleline option interprets the entire input string as a single line, it matches every character in the input string, including \n.

    using System;
    using System.Text.RegularExpressions;
    
    public class Example
    {
       public static void Main()
       {
          string pattern = "^.+";
          string input = "This is one line and" + Environment.NewLine + "this is the second.";
          foreach (Match match in Regex.Matches(input, pattern))
             Console.WriteLine(Regex.Escape(match.Value));
    
          Console.WriteLine();
          foreach (Match match in Regex.Matches(input, pattern, RegexOptions.Singleline))
             Console.WriteLine(Regex.Escape(match.Value));
       }
    }
    // The example displays the following output:
    //       This\ is\ one\ line\ and\r
    //       
    //       This\ is\ one\ line\ and\r\nthis\ is\ the\ second\.
    
    Imports System.Text.RegularExpressions
    
    Module Example
       Public Sub Main()
          Dim pattern As String = "^.+"
          Dim input As String = "This is one line and" + vbCrLf + "this is the second."
          For Each match As Match In Regex.Matches(input, pattern)
             Console.WriteLine(Regex.Escape(match.Value))
          Next
          Console.WriteLine()
          For Each match As Match In Regex.Matches(input, pattern, RegexOptions.SingleLine)
             Console.WriteLine(Regex.Escape(match.Value))
          Next
       End Sub
    End Module
    ' The example displays the following output:
    '       This\ is\ one\ line\ and\r
    '       
    '       This\ is\ one\ line\ and\r\nthis\ is\ the\ second\.
    

Примечание

Так как класс символов . соответствует любому символу, кроме \n, он также соответствует символу \r (символ возврата каретки, \u000D).Because it matches any character except \n, the . character class also matches \r (the carriage return character, \u000D).

  • Точка в положительной или отрицательной группе символов рассматривается как литеральный символ точки, а не как класс символов.In a positive or negative character group, a period is treated as a literal period character, and not as a character class. Дополнительные сведения см. в разделах Положительная группа символов и Отрицательная группа символов ранее в этой статье.For more information, see Positive Character Group and Negative Character Group earlier in this topic. В следующем примере представлено определение регулярного выражения, содержащее символ точки (.) как класс символов и как член положительной группы символов.The following example provides an illustration by defining a regular expression that includes the period character (.) both as a character class and as a member of a positive character group. Регулярное выражение \b.*[.?!;:](\s|\z) начинается на границе слова, выделяет все символы, пока не встретится один из пяти знаков препинания (включая точку), после чего выделяет символ пробела или конца строки.The regular expression \b.*[.?!;:](\s|\z) begins at a word boundary, matches any character until it encounters one of five punctuation marks, including a period, and then matches either a white-space character or the end of the string.

    using System;
    using System.Text.RegularExpressions;
    
    public class Example
    {
       public static void Main()
       {
          string pattern = @"\b.*[.?!;:](\s|\z)";
          string input = "this. what: is? go, thing.";
          foreach (Match match in Regex.Matches(input, pattern))
             Console.WriteLine(match.Value);
       }
    }
    // The example displays the following output:
    //       this. what: is? go, thing.
    
    Imports System.Text.RegularExpressions
    
    Module Example
       Public Sub Main()
          Dim pattern As STring = "\b.*[.?!;:](\s|\z)"
          Dim input As String = "this. what: is? go, thing."
          For Each match As Match In Regex.Matches(input, pattern)
             Console.WriteLine(match.Value)
          Next   
       End Sub
    End Module
    ' The example displays the following output:
    '       this. what: is? go, thing.
    

Примечание

Поскольку элемент языка . соответствует любому символу, он часто используется с отложенным квантификатором, если шаблон регулярного выражения пытается несколько раз найти соответствие любому символу.Because it matches any character, the . language element is often used with a lazy quantifier if a regular expression pattern attempts to match any character multiple times. Для получения дополнительной информации см. Квантификаторы.For more information, see Quantifiers.

Категория Юникода или блок Юникода: \p{}Unicode category or Unicode block: \p{}

В стандарте Юникода каждому символу присваивается общая категория.The Unicode standard assigns each character a general category. Например, определенный символ может быть прописной буквой (категория Lu), десятичной цифрой (категория Nd), математическим символом (категория Sm) или разделителем абзацев (категория Zl).For example, a particular character can be an uppercase letter (represented by the Lu category), a decimal digit (the Nd category), a math symbol (the Sm category), or a paragraph separator (the Zl category). Определенные наборы символов стандарта Юникод также занимают некоторый диапазон или блок последовательных кодовых точек.Specific character sets in the Unicode standard also occupy a specific range or block of consecutive code points. Например, базовая латинская кодировка находится в диапазоне от \u0000 до \u007F, а арабская кодировка находится в диапазоне от \u0600 до \u06FF.For example, the basic Latin character set is found from \u0000 through \u007F, while the Arabic character set is found from \u0600 through \u06FF.

Конструкция регулярного выраженияThe regular expression construct

\p{ имя }\p{ name }

соответствует любым символам, которые относятся к общей категории Юникода или именованному блоку, где name — сокращенное название категории или имя блока.matches any character that belongs to a Unicode general category or named block, where name is the category abbreviation or named block name. Список сокращений категорий см. в подразделе Поддерживаемые общие категории Юникода далее в этом разделе.For a list of category abbreviations, see the Supported Unicode General Categories section later in this topic. Список именованных блоков см. в подразделе Поддерживаемые именованные блоки далее в этом разделе.For a list of named blocks, see the Supported Named Blocks section later in this topic.

В примере ниже конструкция \p{name} используется для выделения общей категории Юникода (в данном случае Pd, т. е. категории знаков препинания и тире) и именованного блока (IsGreek и IsBasicLatin).The following example uses the \p{name} construct to match both a Unicode general category (in this case, the Pd, or Punctuation, Dash category) and a named block (the IsGreek and IsBasicLatin named blocks).

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"\b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+";
      string input = "Κατα Μαθθαίον - The Gospel of Matthew";

      Console.WriteLine(Regex.IsMatch(input, pattern));        // Displays True.
   }
}
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "\b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+"
      Dim input As String = "Κατα Μαθθαίον - The Gospel of Matthew"

      Console.WriteLine(Regex.IsMatch(input, pattern))         ' Displays True.
   End Sub
End Module

Определение регулярного выражения \b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+ показано в таблице ниже.The regular expression \b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+ is defined as shown in the following table.

ШаблонPattern ОписаниеDescription
\b Начало на границе слова.Start at a word boundary.
\p{IsGreek}+ Соответствует одному или нескольким греческим символам.Match one or more Greek characters.
(\s)? Совпадение с нулем или одним символом пробела.Match zero or one white-space character.
(\p{IsGreek}+(\s)?)+ Выделяет один или несколько раз шаблон из одного или нескольких греческих символов, за которыми следует ноль или один символ пробела.Match the pattern of one or more Greek characters followed by zero or one white-space characters one or more times.
\p{Pd} Соответствует знакам препинания и тире.Match a Punctuation, Dash character.
\s Соответствует пробелу.Match a white-space character.
\p{IsBasicLatin}+ Соответствует одному или нескольким базовым латинским символам.Match one or more basic Latin characters.
(\s)? Совпадение с нулем или одним символом пробела.Match zero or one white-space character.
(\p{IsBasicLatin}+(\s)?)+ Выделяет один или несколько раз шаблон из одного или нескольких базовых латинских символов, за которыми следует ноль или один символ пробела.Match the pattern of one or more basic Latin characters followed by zero or one white-space characters one or more times.

Отрицательная категория Юникода или блок Юникода: \P{}Negative Unicode category or Unicode block: \P{}

В стандарте Юникода каждому символу присваивается общая категория.The Unicode standard assigns each character a general category. Например, определенный символ может быть прописной буквой (категория Lu), десятичной цифрой (категория Nd), математическим символом (категория Sm) или разделителем абзацев (категория Zl).For example, a particular character can be an uppercase letter (represented by the Lu category), a decimal digit (the Nd category), a math symbol (the Sm category), or a paragraph separator (the Zl category). Определенные наборы символов стандарта Юникод также занимают некоторый диапазон или блок последовательных кодовых точек.Specific character sets in the Unicode standard also occupy a specific range or block of consecutive code points. Например, базовая латинская кодировка находится в диапазоне от \u0000 до \u007F, а арабская кодировка находится в диапазоне от \u0600 до \u06FF.For example, the basic Latin character set is found from \u0000 through \u007F, while the Arabic character set is found from \u0600 through \u06FF.

Конструкция регулярного выраженияThe regular expression construct

\P{ имя }\P{ name }

соответствует любым символам, которые не относятся к общей категории Юникода или именованному блоку, где name — сокращенное название категории или имя блока.matches any character that does not belong to a Unicode general category or named block, where name is the category abbreviation or named block name. Список сокращений категорий см. в подразделе Поддерживаемые общие категории Юникода далее в этом разделе.For a list of category abbreviations, see the Supported Unicode General Categories section later in this topic. Список именованных блоков см. в подразделе Поддерживаемые именованные блоки далее в этом разделе.For a list of named blocks, see the Supported Named Blocks section later in this topic.

В примере ниже конструкция \P{name} используется для удаления любых символов валют (в данном случае Sc, т. е. категории символов и валют) из числовых строк.The following example uses the \P{name} construct to remove any currency symbols (in this case, the Sc, or Symbol, Currency category) from numeric strings.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"(\P{Sc})+";
      
      string[] values = { "$164,091.78", "£1,073,142.68", "73¢", "€120" };
      foreach (string value in values)
         Console.WriteLine(Regex.Match(value, pattern).Value);
   }
}
// The example displays the following output:
//       164,091.78
//       1,073,142.68
//       73
//       120
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "(\P{Sc})+"
      
      Dim values() As String = { "$164,091.78", "£1,073,142.68", "73¢", "€120"}
      For Each value As String In values
         Console.WriteLine(Regex.Match(value, pattern).Value)
      Next
   End Sub
End Module
' The example displays the following output:
'       164,091.78
'       1,073,142.68
'       73
'       120

Шаблон регулярного выражения (\P{Sc})+ выделяет один или несколько символов, которые не являются символами валют. Это позволяет удалить любой символ валюты из строки результата.The regular expression pattern (\P{Sc})+ matches one or more characters that are not currency symbols; it effectively strips any currency symbol from the result string.

Словообразующий символ: \wWord character: \w

\w соответствует любому словообразующему символу.\w matches any word character. Словообразующий символ входит во все категории Юникода, перечисленные в следующей таблице.A word character is a member of any of the Unicode categories listed in the following table.

КатегорияCategory ОписаниеDescription
LlLl Буква: строчные буквыLetter, Lowercase
LuLu Буква: прописные буквыLetter, Uppercase
LtLt Буква: заглавный регистрLetter, Titlecase
LoLo Буква: другиеLetter, Other
LmLm Буква: модификаторLetter, Modifier
MnMn Метка: не занимающая местоMark, Nonspacing
NdNd Число: десятичная цифраNumber, Decimal Digit
PcPc Пунктуация, соединитель.Punctuation, Connector. Эта категория включает десять символов, наиболее часто используемым из которых является знак подчеркивания (), u+005F.This category includes ten characters, the most commonly used of which is the LOWLINE character (), u+005F.

Если задано поведение, совместимое с ECMAScript, то параметр \w эквивалентен [a-zA-Z_0-9].If ECMAScript-compliant behavior is specified, \w is equivalent to [a-zA-Z_0-9]. Информацию о регулярных выражениях ECMAScript см. в подразделе "Поведение сопоставления ECMAScript" раздела Параметры регулярных выражений.For information on ECMAScript regular expressions, see the "ECMAScript Matching Behavior" section in Regular Expression Options.

Примечание

Так как элемент языка \w соответствует любому словообразующему символу, он часто используется с отложенным квантификатором, если шаблон регулярного выражения пытается несколько раз найти соответствие любому словообразующему символу, за которым следует определенный словообразующий символ.Because it matches any word character, the \w language element is often used with a lazy quantifier if a regular expression pattern attempts to match any word character multiple times, followed by a specific word character. Для получения дополнительной информации см. Квантификаторы.For more information, see Quantifiers.

В примере ниже элемент языка \w используется для выделения повторяющихся символов в слове.The following example uses the \w language element to match duplicate characters in a word. В примере определяется шаблон регулярного выражения (\w)\1, который можно интерпретировать указанным ниже образом.The example defines a regular expression pattern, (\w)\1, which can be interpreted as follows.

ЭлементElement ОписаниеDescription
(\w)(\w) Соответствует словообразующему символу.Match a word character. Это первая группа записи.This is the first capturing group.
\1\1 Соответствует значению первой записи.Match the value of the first capture.
using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"(\w)\1";
      string[] words = { "trellis", "seer", "latter", "summer", 
                         "hoarse", "lesser", "aardvark", "stunned" };
      foreach (string word in words)
      {
         Match match = Regex.Match(word, pattern);
         if (match.Success)
            Console.WriteLine("'{0}' found in '{1}' at position {2}.", 
                              match.Value, word, match.Index);
         else
            Console.WriteLine("No double characters in '{0}'.", word);
      }                                                  
   }
}
// The example displays the following output:
//       'll' found in 'trellis' at position 3.
//       'ee' found in 'seer' at position 1.
//       'tt' found in 'latter' at position 2.
//       'mm' found in 'summer' at position 2.
//       No double characters in 'hoarse'.
//       'ss' found in 'lesser' at position 2.
//       'aa' found in 'aardvark' at position 0.
//       'nn' found in 'stunned' at position 3.
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "(\w)\1"
      Dim words() As String = { "trellis", "seer", "latter", "summer", _
                                "hoarse", "lesser", "aardvark", "stunned" }
      For Each word As String In words
         Dim match As Match = Regex.Match(word, pattern)
         If match.Success Then
            Console.WriteLine("'{0}' found in '{1}' at position {2}.", _
                              match.Value, word, match.Index)
         Else
            Console.WriteLine("No double characters in '{0}'.", word)
         End If
      Next                                                  
   End Sub
End Module
' The example displays the following output:
'       'll' found in 'trellis' at position 3.
'       'ee' found in 'seer' at position 1.
'       'tt' found in 'latter' at position 2.
'       'mm' found in 'summer' at position 2.
'       No double characters in 'hoarse'.
'       'ss' found in 'lesser' at position 2.
'       'aa' found in 'aardvark' at position 0.
'       'nn' found in 'stunned' at position 3.

Несловообразующий символ: \WNon-word character: \W

\W соответствует любому несловообразующему символу.\W matches any non-word character. Элемент языка \W эквивалентен следующему классу символов:The \W language element is equivalent to the following character class:

[^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]

Другими словами, он соответствует любому символу, за исключением символов в категории Юникода, перечисленных в следующей таблице.In other words, it matches any character except for those in the Unicode categories listed in the following table.

КатегорияCategory ОписаниеDescription
LlLl Буква: строчные буквыLetter, Lowercase
LuLu Буква: прописные буквыLetter, Uppercase
LtLt Буква: заглавный регистрLetter, Titlecase
LoLo Буква: другиеLetter, Other
LmLm Буква: модификаторLetter, Modifier
MnMn Метка: не занимающая местоMark, Nonspacing
NdNd Число: десятичная цифраNumber, Decimal Digit
PcPc Пунктуация, соединитель.Punctuation, Connector. Эта категория включает десять символов, наиболее часто используемым из которых является знак подчеркивания (), u+005F.This category includes ten characters, the most commonly used of which is the LOWLINE character (), u+005F.

Если задано поведение, совместимое с ECMAScript, то параметр \W эквивалентен [^a-zA-Z_0-9].If ECMAScript-compliant behavior is specified, \W is equivalent to [^a-zA-Z_0-9]. Информацию о регулярных выражениях ECMAScript см. в подразделе "Поведение сопоставления ECMAScript" раздела Параметры регулярных выражений.For information on ECMAScript regular expressions, see the "ECMAScript Matching Behavior" section in Regular Expression Options.

Примечание

Так как элемент языка \W соответствует любому несловообразующему символу, он часто используется с отложенным квантификатором, если шаблон регулярного выражения пытается несколько раз найти соответствие любому несловообразующему символу, за которым следует определенный несловообразующий символ.Because it matches any non-word character, the \W language element is often used with a lazy quantifier if a regular expression pattern attempts to match any non-word character multiple times followed by a specific non-word character. Для получения дополнительной информации см. Квантификаторы.For more information, see Quantifiers.

В примере ниже показан класс символов \W.The following example illustrates the \W character class. Он определяет шаблон регулярного выражения \b(\w+)(\W){1,2}, выделяющий слово, за которым следует один или два несловообразующих символа, например пробелы или знаки препинания.It defines a regular expression pattern, \b(\w+)(\W){1,2}, that matches a word followed by one or two non-word characters, such as white space or punctuation. Возможные интерпретации регулярного выражения показаны в следующей таблице.The regular expression is interpreted as shown in the following table.

ЭлементElement ОписаниеDescription
\b\b Совпадение должно начинаться на границе слова.Begin the match at a word boundary.
(\w+)(\w+) Совпадение с одним или несколькими символами слова.Match one or more word characters. Это первая группа записи.This is the first capturing group.
(\W){1,2}(\W){1,2} Выделяет несловообразующий символ один или два раза.Match a non-word character either one or two times. Это вторая группа записи.This is the second capturing group.
using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"\b(\w+)(\W){1,2}";
      string input = "The old, grey mare slowly walked across the narrow, green pasture.";
      foreach (Match match in Regex.Matches(input, pattern))
      {
         Console.WriteLine(match.Value);
         Console.Write("   Non-word character(s):");
         CaptureCollection captures = match.Groups[2].Captures;
         for (int ctr = 0; ctr < captures.Count; ctr++)
             Console.Write(@"'{0}' (\u{1}){2}", captures[ctr].Value, 
                           Convert.ToUInt16(captures[ctr].Value[0]).ToString("X4"), 
                           ctr < captures.Count - 1 ? ", " : "");
         Console.WriteLine();
      }   
   }
}
// The example displays the following output:
//       The
//          Non-word character(s):' ' (\u0020)
//       old,
//          Non-word character(s):',' (\u002C), ' ' (\u0020)
//       grey
//          Non-word character(s):' ' (\u0020)
//       mare
//          Non-word character(s):' ' (\u0020)
//       slowly
//          Non-word character(s):' ' (\u0020)
//       walked
//          Non-word character(s):' ' (\u0020)
//       across
//          Non-word character(s):' ' (\u0020)
//       the
//          Non-word character(s):' ' (\u0020)
//       narrow,
//          Non-word character(s):',' (\u002C), ' ' (\u0020)
//       green
//          Non-word character(s):' ' (\u0020)
//       pasture.
//          Non-word character(s):'.' (\u002E)
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "\b(\w+)(\W){1,2}"
      Dim input As String = "The old, grey mare slowly walked across the narrow, green pasture."
      For Each match As Match In Regex.Matches(input, pattern)
         Console.WriteLine(match.Value)
         Console.Write("   Non-word character(s):")
         Dim captures As CaptureCollection = match.Groups(2).Captures
         For ctr As Integer = 0 To captures.Count - 1
             Console.Write("'{0}' (\u{1}){2}", captures(ctr).Value, _
                           Convert.ToUInt16(captures(ctr).Value.Chars(0)).ToString("X4"), _
                           If(ctr < captures.Count - 1, ", ", ""))
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'       The
'          Non-word character(s):' ' (\u0020)
'       old,
'          Non-word character(s):',' (\u002C), ' ' (\u0020)
'       grey
'          Non-word character(s):' ' (\u0020)
'       mare
'          Non-word character(s):' ' (\u0020)
'       slowly
'          Non-word character(s):' ' (\u0020)
'       walked
'          Non-word character(s):' ' (\u0020)
'       across
'          Non-word character(s):' ' (\u0020)
'       the
'          Non-word character(s):' ' (\u0020)
'       narrow,
'          Non-word character(s):',' (\u002C), ' ' (\u0020)
'       green
'          Non-word character(s):' ' (\u0020)
'       pasture.
'          Non-word character(s):'.' (\u002E)

Поскольку объект Group для второй группы записи содержит только один захваченный несловообразующий символ, в примере извлекаются все захваченные несловообразующие символы из объекта CaptureCollection, который возвращается свойством Group.Captures.Because the Group object for the second capturing group contains only a single captured non-word character, the example retrieves all captured non-word characters from the CaptureCollection object that is returned by the Group.Captures property.

Символ пробела: \sWhitespace character: \s

\s соответствует любому символу пробела.\s matches any whitespace character. Это эквивалентно управляющим последовательностям и категориям Юникода, перечисленным в следующей таблице.It is equivalent to the escape sequences and Unicode categories listed in the following table.

КатегорияCategory ОписаниеDescription
\f Символ перевода страницы, \u000C.The form feed character, \u000C.
\n Символ новой строки, \u000A.The newline character, \u000A.
\r Символ возврата каретки, \u000D.The carriage return character, \u000D.
\t Символ табуляции, \u0009.The tab character, \u0009.
\v Символ вертикальной табуляции, \u000B.The vertical tab character, \u000B.
\x85 Многоточие или символ NEXT LINE (NEL) (…), \u0085.The ellipsis or NEXT LINE (NEL) character (…), \u0085.
\p{Z} Соответствует любому разделительному символу.Matches any separator character.

Если задано поведение, совместимое с ECMAScript, то параметр \s эквивалентен [ \f\n\r\t\v].If ECMAScript-compliant behavior is specified, \s is equivalent to [ \f\n\r\t\v]. Информацию о регулярных выражениях ECMAScript см. в подразделе "Поведение сопоставления ECMAScript" раздела Параметры регулярных выражений.For information on ECMAScript regular expressions, see the "ECMAScript Matching Behavior" section in Regular Expression Options.

В примере ниже показан класс символов \s.The following example illustrates the \s character class. Он определяет шаблон регулярного выражения \b\w+(e)?s(\s|$), выделяющий слово, заканчивающееся на "s" или "es", за которым следует знак пробела или конец входной строки.It defines a regular expression pattern, \b\w+(e)?s(\s|$), that matches a word ending in either "s" or "es" followed by either a white-space character or the end of the input string. Возможные интерпретации регулярного выражения показаны в следующей таблице.The regular expression is interpreted as shown in the following table.

ЭлементElement ОписаниеDescription
\b\b Совпадение должно начинаться на границе слова.Begin the match at a word boundary.
\w+\w+ Совпадение с одним или несколькими символами слова.Match one or more word characters.
(e)?(e)? Выделяет "e" ноль или один раз.Match an "e" either zero or one time.
ss Выделяет "s".Match an "s".
(\s|$)(\s|$) Совпадает с символом пробела или концом входной строки.Match either a white-space character or the end of the input string.
using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"\b\w+(e)?s(\s|$)";
      string input = "matches stores stops leave leaves";
      foreach (Match match in Regex.Matches(input, pattern))
         Console.WriteLine(match.Value);
   }
}
// The example displays the following output:
//       matches
//       stores
//       stops
//       leaves
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "\b\w+(e)?s(\s|$)"
      Dim input As String = "matches stores stops leave leaves"
      For Each match As Match In Regex.Matches(input, pattern)
         Console.WriteLine(match.Value)      
      Next
   End Sub
End Module
' The example displays the following output:
'       matches
'       stores
'       stops
'       leaves

Символ, не являющийся пробелом: \SNon-whitespace character: \S

\S соответствует любому символу, не являющемуся пробелом.\S matches any non-white-space character. Он эквивалентен шаблону регулярного выражения [^\f\n\r\t\v\x85\p{Z}] или противоположному шаблону, эквивалентному \s, выделяющему символы пробела.It is equivalent to the [^\f\n\r\t\v\x85\p{Z}] regular expression pattern, or the opposite of the regular expression pattern that is equivalent to \s, which matches white-space characters. Дополнительные сведения см. в разделе Символ пробела: \s.For more information, see White-Space Character: \s.

Если задано поведение, совместимое с ECMAScript, то параметр \S эквивалентен [^ \f\n\r\t\v].If ECMAScript-compliant behavior is specified, \S is equivalent to [^ \f\n\r\t\v]. Информацию о регулярных выражениях ECMAScript см. в подразделе "Поведение сопоставления ECMAScript" раздела Параметры регулярных выражений.For information on ECMAScript regular expressions, see the "ECMAScript Matching Behavior" section in Regular Expression Options.

В примере ниже показан элемент языка \S.The following example illustrates the \S language element. Шаблон регулярного выражения \b(\S+)\s? выделяет строки, разделенные символами пробела.The regular expression pattern \b(\S+)\s? matches strings that are delimited by white-space characters. Второй элемент в объекте GroupCollection содержит совпадающую строку.The second element in the match's GroupCollection object contains the matched string. Возможные интерпретации регулярного выражения показаны в следующей таблице.The regular expression can be interpreted as shown in the following table.

ЭлементElement ОписаниеDescription
\b Совпадение должно начинаться на границе слова.Begin the match at a word boundary.
(\S+) Соответствует одному или нескольким символам, которые не являются пробелами.Match one or more non-white-space characters. Это первая группа записи.This is the first capturing group.
\s? Совпадение с нулем или одним символом пробела.Match zero or one white-space character.
using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"\b(\S+)\s?";
      string input = "This is the first sentence of the first paragraph. " + 
                            "This is the second sentence.\n" + 
                            "This is the only sentence of the second paragraph.";
      foreach (Match match in Regex.Matches(input, pattern))
         Console.WriteLine(match.Groups[1]);
   }
}
// The example displays the following output:
//    This
//    is
//    the
//    first
//    sentence
//    of
//    the
//    first
//    paragraph.
//    This
//    is
//    the
//    second
//    sentence.
//    This
//    is
//    the
//    only
//    sentence
//    of
//    the
//    second
//    paragraph.
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "\b(\S+)\s?"
      Dim input As String = "This is the first sentence of the first paragraph. " + _
                            "This is the second sentence." + vbCrLf + _
                            "This is the only sentence of the second paragraph."
      For Each match As Match In Regex.Matches(input, pattern)
         Console.WriteLine(match.Groups(1))
      Next
   End Sub
End Module
' The example displays the following output:
'    This
'    is
'    the
'    first
'    sentence
'    of
'    the
'    first
'    paragraph.
'    This
'    is
'    the
'    second
'    sentence.
'    This
'    is
'    the
'    only
'    sentence
'    of
'    the
'    second
'    paragraph.

Десятичная цифра: \dDecimal digit character: \d

\d соответствует любой десятичной цифре.\d matches any decimal digit. Он эквивалентен шаблону регулярного выражения \p{Nd}, который включает стандартные десятичные цифры 0–9, а также десятичные цифры из некоторых других наборов символов.It is equivalent to the \p{Nd} regular expression pattern, which includes the standard decimal digits 0-9 as well as the decimal digits of a number of other character sets.

Если задано поведение, совместимое с ECMAScript, то параметр \d эквивалентен [0-9].If ECMAScript-compliant behavior is specified, \d is equivalent to [0-9]. Информацию о регулярных выражениях ECMAScript см. в подразделе "Поведение сопоставления ECMAScript" раздела Параметры регулярных выражений.For information on ECMAScript regular expressions, see the "ECMAScript Matching Behavior" section in Regular Expression Options.

В примере ниже показан элемент языка \d.The following example illustrates the \d language element. Проверяет, представляет ли входная строка допустимый телефонный номер в США и Канаде.It tests whether an input string represents a valid telephone number in the United States and Canada. Шаблон регулярного выражения ^(\(?\d{3}\)?[\s-])?\d{3}-\d{4}$ определяется, как показано в следующей таблице.The regular expression pattern ^(\(?\d{3}\)?[\s-])?\d{3}-\d{4}$ is defined as shown in the following table.

ЭлементElement ОписаниеDescription
^ Начало совпадения в начале входной строки.Begin the match at the beginning of the input string.
\(? Выделяет ноль или один символ "(".Match zero or one literal "(" character.
\d{3} Совпадение с тремя десятичными цифрами.Match three decimal digits.
\)? Выделяет ноль или один символ ")".Match zero or one literal ")" character.
[\s-] Выделяет дефис или пробел.Match a hyphen or a white-space character.
(\(?\d{3}\)?[\s-])? Выделяет несколько раз необязательные открывающие скобки с последующими тремя десятичными цифрами, необязательную закрывающую скобку, а также знак пробела или дефис (если они есть).Match an optional opening parenthesis followed by three decimal digits, an optional closing parenthesis, and either a white-space character or a hyphen zero or one time. Это первая группа записи.This is the first capturing group.
\d{3}-\d{4} Выделяет три десятичных цифры, следующий за ними дефис и еще четыре десятичные цифры.Match three decimal digits followed by a hyphen and four more decimal digits.
$ Соответствует концу входной строки.Match the end of the input string.
using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"^(\(?\d{3}\)?[\s-])?\d{3}-\d{4}$";
      string[] inputs = { "111 111-1111", "222-2222", "222 333-444", 
                          "(212) 111-1111", "111-AB1-1111", 
                          "212-111-1111", "01 999-9999" };
      
      foreach (string input in inputs)
      {
         if (Regex.IsMatch(input, pattern)) 
            Console.WriteLine(input + ": matched");
         else
            Console.WriteLine(input + ": match failed");
      }
   }
}
// The example displays the following output:
//       111 111-1111: matched
//       222-2222: matched
//       222 333-444: match failed
//       (212) 111-1111: matched
//       111-AB1-1111: match failed
//       212-111-1111: matched
//       01 999-9999: match failed
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "^(\(?\d{3}\)?[\s-])?\d{3}-\d{4}$"
      Dim inputs() As String = { "111 111-1111", "222-2222", "222 333-444", _
                                 "(212) 111-1111", "111-AB1-1111", _
                                 "212-111-1111", "01 999-9999" }
      
      For Each input As String In inputs
         If Regex.IsMatch(input, pattern) Then 
            Console.WriteLine(input + ": matched")
         Else
            Console.WriteLine(input + ": match failed")
         End If   
      Next
   End Sub
End Module
' The example displays the following output:
'       111 111-1111: matched
'       222-2222: matched
'       222 333-444: match failed
'       (212) 111-1111: matched
'       111-AB1-1111: match failed
'       212-111-1111: matched
'       01 999-9999: match failed

Символ, не являющийся цифрой: \DNon-digit character: \D

\D соответствует любому символу, не являющемуся цифрой.\D matches any non-digit character. Он эквивалентен шаблону регулярного выражения \P{Nd}.It is equivalent to the \P{Nd} regular expression pattern.

Если задано поведение, совместимое с ECMAScript, то параметр \D эквивалентен [^0-9].If ECMAScript-compliant behavior is specified, \D is equivalent to [^0-9]. Информацию о регулярных выражениях ECMAScript см. в подразделе "Поведение сопоставления ECMAScript" раздела Параметры регулярных выражений.For information on ECMAScript regular expressions, see the "ECMAScript Matching Behavior" section in Regular Expression Options.

В следующем примере показан элемент языка \D.The following example illustrates the \D language element. Он проверяет, включает ли строка (например, номер продукта) соответствующее сочетание десятичных и недесятичных символов.It tests whether a string such as a part number consists of the appropriate combination of decimal and non-decimal characters. Шаблон регулярного выражения ^\D\d{1,5}\D*$ определяется, как показано в следующей таблице.The regular expression pattern ^\D\d{1,5}\D*$ is defined as shown in the following table.

ЭлементElement ОписаниеDescription
^ Начало совпадения в начале входной строки.Begin the match at the beginning of the input string.
\D Выделяет любой символ, не являющийся цифрой.Match a non-digit character.
\d{1,5} Выделяет от одной до пяти десятичных цифр.Match from one to five decimal digits.
\D* Выделяет нуль, одну или несколько недесятичных цифр.Match zero, one, or more non-decimal characters.
$ Соответствует концу входной строки.Match the end of the input string.
using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"^\D\d{1,5}\D*$"; 
      string[] inputs = { "A1039C", "AA0001", "C18A", "Y938518" }; 
      
      foreach (string input in inputs)
      {
         if (Regex.IsMatch(input, pattern))
            Console.WriteLine(input + ": matched");
         else
            Console.WriteLine(input + ": match failed");
      }
   }
}
// The example displays the following output:
//       A1039C: matched
//       AA0001: match failed
//       C18A: matched
//       Y938518: match failed
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "^\D\d{1,5}\D*$" 
      Dim inputs() As String = { "A1039C", "AA0001", "C18A", "Y938518" } 
      
      For Each input As String In inputs
         If Regex.IsMatch(input, pattern) Then
            Console.WriteLine(input + ": matched")
         Else
            Console.WriteLine(input + ": match failed")
         End If   
      Next
   End Sub
End Module
' The example displays the following output:

Поддерживаемые общие категории ЮникодаSupported Unicode general categories

В Юникоде определяются общие категории, приведенные в следующей таблице.Unicode defines the general categories listed in the following table. Дополнительные сведения см. в подразделах "Формат файлов UCD" и "Значения общих категорий" в разделе База данных символов Юникода.For more information, see the "UCD File Format" and "General Category Values" subtopics at the Unicode Character Database.

КатегорияCategory ОписаниеDescription
Lu Буква: прописные буквыLetter, Uppercase
Ll Буква: строчные буквыLetter, Lowercase
Lt Буква: заглавный регистрLetter, Titlecase
Lm Буква: модификаторLetter, Modifier
Lo Буква: другиеLetter, Other
L Все буквенные символы.All letter characters. Включает символы Lu, Ll, Lt, Lm и LoThis includes the Lu, Ll, Lt, Lm, and Lo characters.
Mn Метка: не занимающая местоMark, Nonspacing
Mc Метка: комбинированнаяMark, Spacing Combining
Me Метка: вложеннаяMark, Enclosing
M Все диакритические знаки.All diacritic marks. Включает категории Mn, Mc и Me.This includes the Mn, Mc, and Me categories.
Nd Число: десятичная цифраNumber, Decimal Digit
Nl Число: букваNumber, Letter
No Число: другоеNumber, Other
N Все числа.All numbers. Включает категории Nd, Nl и No.This includes the Nd, Nl, and No categories.
Pc Пунктуация: соединительPunctuation, Connector
Pd Пунктуация: тиреPunctuation, Dash
Ps Пунктуация: открывающий знак пунктуацииPunctuation, Open
Pe Пунктуация: закрывающий знак пунктуацииPunctuation, Close
Pi Пунктуация: открывающая кавычка (в зависимости от использования поведение может быть аналогичным Ps или Pe)Punctuation, Initial quote (may behave like Ps or Pe depending on usage)
Pf Пунктуация: закрывающая кавычка (в зависимости от использования поведение может быть аналогичным Ps или Pe)Punctuation, Final quote (may behave like Ps or Pe depending on usage)
Po Пунктуация: другие знаки пунктуацииPunctuation, Other
P Все знаки препинания.All punctuation characters. Включает категории Pc, Pd, Ps, Pe, Pi, Pf и Po.This includes the Pc, Pd, Ps, Pe, Pi, Pf, and Po categories.
Sm Символ: математическийSymbol, Math
Sc Символ денежной единицыSymbol, Currency
Sk Символ: модификаторSymbol, Modifier
So Символ: другиеSymbol, Other
S Все символы.All symbols. Включает категории Sm, Sc, Sk и So.This includes the Sm, Sc, Sk, and So categories.
Zs Разделитель: пробелSeparator, Space
Zl Разделитель: строкаSeparator, Line
Zp Разделитель: абзацSeparator, Paragraph
Z Все знаки разделения.All separator characters. Включает категории Zs, Zl и Zp.This includes the Zs, Zl, and Zp categories.
Cc Другое: управляющий символOther, Control
Cf Другое: форматOther, Format
Cs Другое: заменяющий символOther, Surrogate
Co Другое: индивидуальное использованиеOther, Private Use
Cn Другое: неназначенные символы (ни один символ не имеет этого свойства)Other, Not Assigned (no characters have this property)
C Все управляющие символы.All control characters. Включает категории Cc, Cf, Cs, Co и Cn.This includes the Cc, Cf, Cs, Co, and Cn categories.

Можно определить категорию Юникода для любого отдельного символа, передав его в метод GetUnicodeCategory.You can determine the Unicode category of any particular character by passing that character to the GetUnicodeCategory method. В следующем примере метод GetUnicodeCategory используется для определения категории каждого элемента в массиве, содержащем выбранные латинские символы.The following example uses the GetUnicodeCategory method to determine the category of each element in an array that contains selected Latin characters.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      char[] chars = { 'a', 'X', '8', ',', ' ', '\u0009', '!' };
      
      foreach (char ch in chars)
         Console.WriteLine("'{0}': {1}", Regex.Escape(ch.ToString()), 
                           Char.GetUnicodeCategory(ch));
   }
}
// The example displays the following output:
//       'a': LowercaseLetter
//       'X': UppercaseLetter
//       '8': DecimalDigitNumber
//       ',': OtherPunctuation
//       '\ ': SpaceSeparator
//       '\t': Control
//       '!': OtherPunctuation
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim chars() As Char = { "a"c, "X"c, "8"c, ","c, " "c, ChrW(9), "!"c }
      
      For Each ch As Char In chars
         Console.WriteLine("'{0}': {1}", Regex.Escape(ch.ToString()), _
                           Char.GetUnicodeCategory(ch))
      Next         
   End Sub
End Module
' The example displays the following output:
'       'a': LowercaseLetter
'       'X': UppercaseLetter
'       '8': DecimalDigitNumber
'       ',': OtherPunctuation
'       '\ ': SpaceSeparator
'       '\t': Control
'       '!': OtherPunctuation

Поддерживаемые именованные блокиSupported named blocks

Платформа .NET предоставляет именованные блоки, перечисленные в следующей таблице..NET provides the named blocks listed in the following table. Набор поддерживаемых именованных блоков составлен на основе Юникода версии 4.0 и Perl версии 5.6.The set of supported named blocks is based on Unicode 4.0 and Perl 5.6. Сведения о регулярном выражении, которое использует именованные блоки, см. в разделе Категория Юникода или блок Юникода: \p{}.For a regular expression that uses named blocks, see the Unicode category or Unicode block: \p{} section.

Диапазон кодовых точекCode point range Имя блокаBlock name
0000 - 007F0000 - 007F IsBasicLatin
0080 - 00FF0080 - 00FF IsLatin-1Supplement
0100 - 017F0100 - 017F IsLatinExtended-A
0180 - 024F0180 - 024F IsLatinExtended-B
0250 - 02AF0250 - 02AF IsIPAExtensions
02B0 - 02FF02B0 - 02FF IsSpacingModifierLetters
0300 - 036F0300 - 036F IsCombiningDiacriticalMarks
0370 - 03FF0370 - 03FF IsGreek

-или--or-

IsGreekandCoptic
0400 - 04FF0400 - 04FF IsCyrillic
0500 - 052F0500 - 052F IsCyrillicSupplement
0530 - 058F0530 - 058F IsArmenian
0590 - 05FF0590 - 05FF IsHebrew
0600 - 06FF0600 - 06FF IsArabic
0700 - 074F0700 - 074F IsSyriac
0780 - 07BF0780 - 07BF IsThaana
0900 - 097F0900 - 097F IsDevanagari
0980 - 09FF0980 - 09FF IsBengali
0A00 - 0A7F0A00 - 0A7F IsGurmukhi
0A80 - 0AFF0A80 - 0AFF IsGujarati
0B00 - 0B7F0B00 - 0B7F IsOriya
0B80 - 0BFF0B80 - 0BFF IsTamil
0C00 - 0C7F0C00 - 0C7F IsTelugu
0C80 - 0CFF0C80 - 0CFF IsKannada
0D00 - 0D7F0D00 - 0D7F IsMalayalam
0D80 - 0DFF0D80 - 0DFF IsSinhala
0E00 - 0E7F0E00 - 0E7F IsThai
0E80 - 0EFF0E80 - 0EFF IsLao
0F00 - 0FFF0F00 - 0FFF IsTibetan
1000 - 109F1000 - 109F IsMyanmar
10A0 - 10FF10A0 - 10FF IsGeorgian
1100 - 11FF1100 - 11FF IsHangulJamo
1200 - 137F1200 - 137F IsEthiopic
13A0 - 13FF13A0 - 13FF IsCherokee
1400 - 167F1400 - 167F IsUnifiedCanadianAboriginalSyllabics
1680 - 169F1680 - 169F IsOgham
16A0 - 16FF16A0 - 16FF IsRunic
1700 - 171F1700 - 171F IsTagalog
1720 - 173F1720 - 173F IsHanunoo
1740 - 175F1740 - 175F IsBuhid
1760 - 177F1760 - 177F IsTagbanwa
1780 - 17FF1780 - 17FF IsKhmer
1800 - 18AF1800 - 18AF IsMongolian
1900 - 194F1900 - 194F IsLimbu
1950 - 197F1950 - 197F IsTaiLe
19E0 - 19FF19E0 - 19FF IsKhmerSymbols
1D00 - 1D7F1D00 - 1D7F IsPhoneticExtensions
1E00 - 1EFF1E00 - 1EFF IsLatinExtendedAdditional
1F00 - 1FFF1F00 - 1FFF IsGreekExtended
2000 - 206F2000 - 206F IsGeneralPunctuation
2070 - 209F2070 - 209F IsSuperscriptsandSubscripts
20A0 - 20CF20A0 - 20CF IsCurrencySymbols
20D0 - 20FF20D0 - 20FF IsCombiningDiacriticalMarksforSymbols

-или--or-

IsCombiningMarksforSymbols
2100 - 214F2100 - 214F IsLetterlikeSymbols
2150 - 218F2150 - 218F IsNumberForms
2190 - 21FF2190 - 21FF IsArrows
2200 - 22FF2200 - 22FF IsMathematicalOperators
2300 - 23FF2300 - 23FF IsMiscellaneousTechnical
2400 - 243F2400 - 243F IsControlPictures
2440 - 245F2440 - 245F IsOpticalCharacterRecognition
2460 - 24FF2460 - 24FF IsEnclosedAlphanumerics
2500 - 257F2500 - 257F IsBoxDrawing
2580 - 259F2580 - 259F IsBlockElements
25A0 - 25FF25A0 - 25FF IsGeometricShapes
2600 - 26FF2600 - 26FF IsMiscellaneousSymbols
2700 - 27BF2700 - 27BF IsDingbats
27C0 - 27EF27C0 - 27EF IsMiscellaneousMathematicalSymbols-A
27F0 - 27FF27F0 - 27FF IsSupplementalArrows-A
2800 - 28FF2800 - 28FF IsBraillePatterns
2900 - 297F2900 - 297F IsSupplementalArrows-B
2980 - 29FF2980 - 29FF IsMiscellaneousMathematicalSymbols-B
2A00 - 2AFF2A00 - 2AFF IsSupplementalMathematicalOperators
2B00 - 2BFF2B00 - 2BFF IsMiscellaneousSymbolsandArrows
2E80 - 2EFF2E80 - 2EFF IsCJKRadicalsSupplement
2F00 - 2FDF2F00 - 2FDF IsKangxiRadicals
2FF0 - 2FFF2FF0 - 2FFF IsIdeographicDescriptionCharacters
3000 - 303F3000 - 303F IsCJKSymbolsandPunctuation
3040 - 309F3040 - 309F IsHiragana
30A0 - 30FF30A0 - 30FF IsKatakana
3100 - 312F3100 - 312F IsBopomofo
3130 - 318F3130 - 318F IsHangulCompatibilityJamo
3190 - 319F3190 - 319F IsKanbun
31A0 - 31BF31A0 - 31BF IsBopomofoExtended
31F0 - 31FF31F0 - 31FF IsKatakanaPhoneticExtensions
3200 - 32FF3200 - 32FF IsEnclosedCJKLettersandMonths
3300 - 33FF3300 - 33FF IsCJKCompatibility
3400 - 4DBF3400 - 4DBF IsCJKUnifiedIdeographsExtensionA
4DC0 - 4DFF4DC0 - 4DFF IsYijingHexagramSymbols
4E00 - 9FFF4E00 - 9FFF IsCJKUnifiedIdeographs
A000 - A48FA000 - A48F IsYiSyllables
A490 - A4CFA490 - A4CF IsYiRadicals
AC00 - D7AFAC00 - D7AF IsHangulSyllables
D800 - DB7FD800 - DB7F IsHighSurrogates
DB80 - DBFFDB80 - DBFF IsHighPrivateUseSurrogates
DC00 - DFFFDC00 - DFFF IsLowSurrogates
E000 - F8FFE000 - F8FF IsPrivateUse или IsPrivateUseAreaIsPrivateUse or IsPrivateUseArea
F900 - FAFFF900 - FAFF IsCJKCompatibilityIdeographs
FB00 - FB4FFB00 - FB4F IsAlphabeticPresentationForms
FB50 - FDFFFB50 - FDFF IsArabicPresentationForms-A
FE00 - FE0FFE00 - FE0F IsVariationSelectors
FE20 - FE2FFE20 - FE2F IsCombiningHalfMarks
FE30 - FE4FFE30 - FE4F IsCJKCompatibilityForms
FE50 - FE6FFE50 - FE6F IsSmallFormVariants
FE70 - FEFFFE70 - FEFF IsArabicPresentationForms-B
FF00 - FFEFFF00 - FFEF IsHalfwidthandFullwidthForms
FFF0 - FFFFFFF0 - FFFF IsSpecials

Вычитание класса символов: [базовая_группа - [исключенная_группа]]Character class subtraction: [base_group - [excluded_group]]

Класс знаков определяет набор знаков.A character class defines a set of characters. Результатом вычитания класса знаков является набор знаков, полученный в результате исключения одного класса знаков из другого класса знаков.Character class subtraction yields a set of characters that is the result of excluding the characters in one character class from another character class.

Выражение вычитания класса знаков имеет следующий вид:A character class subtraction expression has the following form:

[ base_group -[ excluded_group ]][ base_group -[ excluded_group ]]

Квадратные скобки ([]) и дефис (-) являются обязательными.The square brackets ([]) and hyphen (-) are mandatory. base_group представляет собой положительную или отрицательную группу символов.The base_group is a positive character group or a negative character group. Компонент excluded_group — это другая положительная или отрицательная группа символов или другое выражение вычитания класса символов (то есть можно осуществлять вложение выражений вычитания класса символов).The excluded_group component is another positive or negative character group, or another character class subtraction expression (that is, you can nest character class subtraction expressions).

Например, предположим, что имеется базовая группа, состоящая из диапазона знаков от "а" до "z".For example, suppose you have a base group that consists of the character range from "a" through "z". Чтобы задать набор знаков, состоящий из базовой группы за исключением знака "m", используйте команду [a-z-[m]].To define the set of characters that consists of the base group except for the character "m", use [a-z-[m]]. Чтобы задать набор знаков, состоящий из базовой группы за исключением знаков "d", "j", и "p", используйте команду [a-z-[djp]].To define the set of characters that consists of the base group except for the set of characters "d", "j", and "p", use [a-z-[djp]]. Чтобы определить набор знаков, состоящий из базовой группы за исключением диапазона знаков от "m" до "p", используйте команду [a-z-[m-p]].To define the set of characters that consists of the base group except for the character range from "m" through "p", use [a-z-[m-p]].

Рассмотрим вложенное выражение вычитания классов знаков [a-z-[d-w-[m-o]]].Consider the nested character class subtraction expression, [a-z-[d-w-[m-o]]]. Вычисление выражения начинается из самого внутреннего диапазона знаков.The expression is evaluated from the innermost character range outward. Сначала диапазон знаков от "m" до "o" вычитается из диапазона знаков от "d" до "w", в результате чего остается набор знаков от "d" до "i" и от "p" до "w".First, the character range from "m" through "o" is subtracted from the character range "d" through "w", which yields the set of characters from "d" through "l" and "p" through "w". Затем этот набор вычитается из диапазона знаков от "a" до "z", вследствие чего получается набор знаков [abcmnoxyz].That set is then subtracted from the character range from "a" through "z", which yields the set of characters [abcmnoxyz].

При вычитании класса знаков можно использовать любой класс знаков.You can use any character class with character class subtraction. Чтобы определить набор символов, состоящий из всех символов Юникода от \u0000 до \uFFFF, за исключением пробела (\s), знаков препинания в общей категории (\p{P}), символов в именованном блоке IsGreek (\p{IsGreek}) и управляющего символа Юникода "следующая строка" (\x85), используйте [\u0000-\uFFFF-[\s\p{P}\p{IsGreek}\x85]].To define the set of characters that consists of all Unicode characters from \u0000 through \uFFFF except white-space characters (\s), the characters in the punctuation general category (\p{P}), the characters in the IsGreek named block (\p{IsGreek}), and the Unicode NEXT LINE control character (\x85), use [\u0000-\uFFFF-[\s\p{P}\p{IsGreek}\x85]].

Выберите классы знаков для выражения вычитания класса знаков, которое возвратит полезные результаты.Choose character classes for a character class subtraction expression that will yield useful results. Избегайте выражений, в результате которых возвращается пустой набор знаков, который ничему не соответствует, и выражений, эквивалентных исходной базовой группе.Avoid an expression that yields an empty set of characters, which cannot match anything, or an expression that is equivalent to the original base group. Например, пустой набор является результатом выражения [\p{IsBasicLatin}-[\x00-\x7F]], которое вычитает все символы диапазона IsBasicLatin из общей категории IsBasicLatin.For example, the empty set is the result of the expression [\p{IsBasicLatin}-[\x00-\x7F]], which subtracts all characters in the IsBasicLatin character range from the IsBasicLatin general category. Аналогично, результатом выражения [a-z-[0-9]] является исходная базовая группа.Similarly, the original base group is the result of the expression [a-z-[0-9]]. Это происходит из-за того, что базовая группа, которая является диапазоном букв от "a" до "z", не содержит знаков исключаемой группы, которая является диапазоном десятичных цифр от "0" до "9".This is because the base group, which is the character range of letters from "a" through "z", does not contain any characters in the excluded group, which is the character range of decimal digits from "0" through "9".

В следующем примере определяется регулярное выражение ^[0-9-[2468]]+$, которое выделяет ноль и нечетные цифры во входной строке.The following example defines a regular expression, ^[0-9-[2468]]+$, that matches zero and odd digits in an input string. Возможные интерпретации регулярного выражения показаны в следующей таблице.The regular expression is interpreted as shown in the following table.

ЭлементElement ОписаниеDescription
^ Соответствие должно обнаруживаться в начале входной строки.Begin the match at the start of the input string.
[0-9-[2468]]+ Соответствует одному или нескольким вхождениям любого символа от 0 до 9, за исключением 2, 4, 6 и 8.Match one or more occurrences of any character from 0 to 9 except for 2, 4, 6, and 8. Другими словами, выделяется одно или несколько вхождений нуля или нечетной цифры.In other words, match one or more occurrences of zero or an odd digit.
$ Совпадение должно заканчиваться в конце входной строки.End the match at the end of the input string.
using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string[] inputs = { "123", "13579753", "3557798", "335599901" };
      string pattern = @"^[0-9-[2468]]+$";
      
      foreach (string input in inputs)
      {
         Match match = Regex.Match(input, pattern);
         if (match.Success) 
            Console.WriteLine(match.Value);
      }      
   }
}
// The example displays the following output:
//       13579753
//       335599901
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim inputs() As String = { "123", "13579753", "3557798", "335599901" }
      Dim pattern As String = "^[0-9-[2468]]+$"
      
      For Each input As String In inputs
         Dim match As Match = Regex.Match(input, pattern)
         If match.Success Then Console.WriteLine(match.Value)
      Next
   End Sub
End Module
' The example displays the following output:
'       13579753
'       335599901

См. такжеSee also