Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
САОД_ответы_catsto_NEW.doc
Скачиваний:
17
Добавлен:
16.04.2019
Размер:
365.57 Кб
Скачать
  1. Язык регулярных выражений. Классы символов, исчислители, альтернативы и подстановки. Применение регулярных выражений для изменения формата даты.

Помимо довольно богатых методов работы со строками, в .Net реализованы и регулярные выражения. Это наиболее мощный инструмент разбора и манипулирования текстовыми данными.

Язык регулярных выражений предназначен для манипуляций с текстом. Он включает 2 основных видов символов – обычные символы и метасимволы. Именно метасимволы дают регулярным выражениям их мощь.

Метасимволы:

\

- считать следующий метасимвол как обычный символ.

^

- начало строки

.

- один произвольный символ. Кроме '\n' - конец строки.

$

- конец строки

|

- альтернатива (или)

()

- группировка

[]

- класс символов

Например,

Regex rx = new Regex(@"^-?\d+(\.\d{2})?$");

такое регулярное выражение отвечает формату денежных величин. А такое (@"^\+?\d\(\d{3}\d{3}-\d{4}$" - номеру телефона.

Любую строку можно проверить на соответствие этим правилам.

If (rx.IsMatch(testString))

Регулярное выражение представляет собой образец, или шаблон, который сопоставляется со строкой. Это сопоставление, или поиск по шаблону, может закончиться успехом, или неудачей. Кроме того, совпадающий образец может быть заменен другой строкой или скопирован во внешнюю переменную.

Регулярные выражения применяют для:

а) поиска подстроки, удовлетворяющей шаблону регулярного выражения, в строке. б) поиска и замены подстроки, удовлетворяющей шаблону регулярного выражения, в строке.

в) проверки на соответствие заданной строки шаблону.

г) извлечения подстроки, удовлетворяющей шаблону регулярного выражения, из строки.

Правила регулярного выражения

  • Любой символ обозначает себя самого, если это не метасимвол. Если вам нужно отменить действие метасимвола, то поставьте перед ним '\'.

  • Строка символов обозначает строку этих символов.

  • Множество возможных символов (класс) заключается в квадратные скобки '[]', это значит, что в данном месте может стоять один из указанных в скобках символов.

  • Если первый символ в скобках это '^' - значит ни один из указанных символов не может стоять в данном месте выражения.

  • Внутри класса можно употреблять символ '-', обозначающий диапазон символов. Например, a-z - один из малых букв латинского алфавита, 0-9 - цифра и т.д.

  • Все символы, включая специальные, можно обозначать с помощью '\'.

  • Альтернативные последовательности разделяются символом '|' Заметьте что внутри квадратных скобок это обычный символ.

  • Внутри регулярного выражения можно указывать "подшаблоны" заключая их в круглые скобки и ссылаться на них как '\номер' Первая скобка обозначается как '\1'.

Вот сокращенная табличка ключевых метасимволов языка регулярных выражений:

Escape символы

Символы кроме: . $ ^ { [ ( | ) * + ? \ представляют самих себя, т.е. не являются метасимволами.

\n – соответствует концу строки

. – соответствует любому символу

\ - когда за ним следует один из метасимволов, соответствует этому символу, как обычному. Например, \* соответствует *.

\040 – соответствует символу с ASCII кодом 40 в десятеричном представлении

\x20 – соответствует символу с ASCII кодом 20 в шестнадцатеричном представлении

\u0020 – соответствует символу в Unicode в шестнадцатеричном представлении.

Несимвольные условия:

Наиболее употребительными из них являются 2 метасимвола:

^ - начало строки или ввода

$ - конец строки или ввода

Классы символов:

Класс символов описывает множество символов, которые принадлежат этому классу. Если символ во входном потоке входит в множество определяемое классом, то считается, что он отвечает регулярному выражению.

[..] – для описания класса символов, например,[aeiou] – гласные буквы, [0-9] цифры, можно перечислить знаки препинания и пр..

[^..] – описание исключения. Т.е. любые символы, кроме тех, что встречаются в квадратных скобках.

\n\t etc.                         Соответствует знаку новой линии, символу табуля­ции и т. д.

\ b                                  Соответствует на границе слова

\В                                 Соответствует внутри границ слова

\ d                                  Соответствует цифре

\ D                                 Соответствует не цифре

\ s                                  Соответствует пробелу

\S                                 Соответствует не пробелу

\ w                                 Соответствует букве или цифре

\ W                                Соответствует символу, не являющемуся ни буквой, ни цифрой

Последовательности

(…) – определяет последовательность символов. Т.е. (abc) соответствует именно фрагменту abc, а не любой из этих букв. Последовательности автоматически нумеруются, в порядке открывающих скобок. Это часто используется в подстановках.

(?<name>) – задает имя последующему совпадению. Используется в подстановках.

(?!...) – соответствует отсутствию указанной последовательности.

Исчислители

Исчислители определяют требования к количеству элементов

{n} – повторение предыдущего элемента n раз

{n,} – повторение не менее n раз.

{n,m} – повторение не менее n, но не более m раз

? – соответствует {0,1}

+ - соответствует {1,}

* - соответствует {0,}

Альтернативы

| - соответствие любой из конструкций

Подстановки

$number – подставляет совпадение (последовательности) с номером number.

${name} – подставляет совпадение с именем name.

Пример

Regex re = new Regex(@"\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b");

string s = re.Replace("12/17/2009", "${day}-${month}-${year}"); // Заменяет формат даты.

\w

- алфавитно-цифровой или '_' символ

\w+

- слово

\W

- не -//-

\d+

- целое число

\s

- один пробел

[+-]?\d+

- целое со знаком

\S

- один не пробел

[+-]?\d+\.?\d*

- число с точкой

\d

- одна цифр

\w+

- слово

\D

- одна не цифра

\d+

- целое число