Регулярные выражения как язык
Язык регулярных выражений создан и оптимизирован для работы с текстом. В языке используется два основных типа знаков: обычные текстовые знаки и метасимволы. Своими возможностями регулярные выражения обязаны именно метасимволам.
Распространенными метасимволами являются знаки "?" и "*", которые использовались в файловой системе 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. |
Escape-знаки
|
|
Большинство основных операторов языка регулярных выражений — это одиночные знаки без escape-знака. Escape-знак "\" (одиночная обратная косая черта) указывает модулю обработки регулярных выражений, что следующий за ним знак не является оператором. Например, звездочка (*) интерпретируется модулем обработки как квантор повторения, а звездочка, перед которой стоит знак обратной косой черты (\*), — как знак Юникода 002A.
Escape-знаки, перечисленные в следующей таблице, распознаются как в регулярных выражениях, так и в шаблонах замены.
Escape-знак | Описание |
Обычные знаки | Все знаки, кроме ".", "$", "^", "{", "[", "(", "|", ")", "*", "+", "?" и "\" соответствуют сами себе. |
\a | Соответствует знаку колокольчика (будильника) \u0007. |
\b | Соответствует символу BACKSPACE \u0008, если находится в классе знаков []. В других случаях см. примечание после этой таблицы. |
\t | Соответствует знаку табуляции \u0009. |
\r | Соответствует знаку возврата каретки \u000D. |
\v | Соответствует знаку вертикальной табуляции \u000B. |
\f | Соответствует знаку перевода страницы \u000C. |
\n | Соответствует знаку новой строки \u000A. |
\e | Соответствует escape-знаку \u001B. |
\040 | Соответствует знаку ASCII как восьмеричному числу (до трех разрядов). Числа, начинающиеся не с нуля, представляют собой обратные ссылки, если они состоят из одной цифры или соответствуют номеру собираемой группы. Например, знак \040 соответствует пробелу. |
|
|
\x20 | Matches an ASCII character using hexadecimal representation (exactly two digits). | ||
\cC | Matches an ASCII control character; for example, \cC is control-C. | ||
\u0020 | Matches a Unicode character using hexadecimal representation (exactly four digits).
| ||
\ | When followed by a character that is not recognized as an escaped character, matches that character. For example, \* is the same as \x2A. | ||
Note: | |||
The escaped character \b is a special case. In a regular expression, \b denotes a word boundary (between \w and \W characters) except within a [] character class, where \b refers to the backspace character. In a replacement pattern, \b always denotes a backspace. |
\x20 | Соответствует знаку ASCII в шестнадцатеричном представлении (строго две цифры). | ||||
\cC | Соответствует управляющему знаку ASCII. Например, \cC — CTRL+C. | ||||
\u0020 | Соответствует знаку Юникода в шестнадцатеричном представлении (строго четыре цифры).
| ||||
\ | Со следующим знаком, который не распознается как escape-знак, соответствует этому знаку. Например, \* совпадает с \x2A. | ||||
Примечание. | |||||
Escape-знак \b — исключение. В регулярных выражениях \b обозначает границу слова (между знаками \w и \W), за исключением случая внутри класса знаков [], где \b указывает на знак BACKSPACE. В шаблоне подстановки \b всегда означает BACKSPACE.
Мы поможем в написании ваших работ! |