Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp_Prog_Guide.doc
Скачиваний:
16
Добавлен:
16.11.2019
Размер:
6.22 Mб
Скачать

Регулярные выражения как язык

Язык регулярных выражений создан и оптимизирован для работы с текстом. В языке используется два основных типа знаков: обычные текстовые знаки и метасимволы. Своими возможностями регулярные выражения обязаны именно метасимволам.

Распространенными метасимволами являются знаки "?" и "*", которые использовались в файловой системе DOS для представления одиночных знаков или групп знаков. Файловая команда DOS COPY *.DOC A: производит копирование всех файлов с расширением DOC на диск A. Метасимвол "*" здесь обозначает произвольное имя файла, стоящее перед расширением файла DOC. В регулярных выражениях эта концепция была существенно расширена, что привело к формированию обширного набора метасимволов, позволяющих создавать весьма сложные выражения с помощью сравнительно небольшого количества знаков.

Например, при применении регулярного выражения \s2000 к тексту сообщения, будут найдены все вхождения строки "2000", которым предшествует любой пробельный символ, например пробел или табуляция.

Примечание.

При использовании языков C++, C# или JScript специальные escape-знаки, например "\s", необходимо предварять дополнительной обратной косой чертой (например, "\\s2000"), чтобы указать на то, что обратная косая черта в escape-знаке является литеральным знаком. В противном случае обработчик регулярных выражений будет обрабатывать обратную косую черту и символ "s" в выражении \s как два различных оператора. При использовании Visual Basic 2005 добавлять обратную косую черту необязательно. При работе на C# можно использовать литеральные строки с префиксом @, в которых не действует escape-преобразование (например, @"\s2000").

С помощью регулярных выражений можно осуществлять и более сложный поиск. Например, регулярное выражение (?<char>\w)\k<char>, использующее именованные группы и механизм обратных ссылок, ведет поиск соседних парных знаков. Если применить его к строке "Я, пожалуй, выпью чашечку латте или мокко", то оно найдет совпадения в словах "латте" и "мокко".

Character Escapes

Most of the important regular expression language operators are unescaped single characters. The escape character \ (a single backslash) signals to the regular expression parser that the character following the backslash is not an operator. For example, the parser treats an asterisk (*) as a repeating quantifier and a backslash followed by an asterisk (\*) as the Unicode character 002A.

The character escapes listed in this table are recognized both in regular expressions and in replacement patterns.

Escaped character

Description

ordinary characters

Characters other than . $ ^ { [ ( | ) * + ? \ match themselves.

\a

Matches a bell (alarm) \u0007.

\b

Matches a backspace \u0008 if in a [] character class; otherwise, see the note following this table.

\t

Matches a tab \u0009.

\r

Matches a carriage return \u000D.

\v

Matches a vertical tab \u000B.

\f

Matches a form feed \u000C.

\n

Matches a new line \u000A.

\e

Matches an escape \u001B.

\040

Matches an ASCII character as octal (up to three digits); numbers with no leading zero are backreferences if they have only one digit or if they correspond to a capturing group number.For example, the character \040 represents a space.