If (rx.IsMatch(testString))
Регулярное выражение представляет собой образец, или шаблон, который сопоставляется со строкой.
Регулярные выражения применяют для:
а) поиска подстроки, удовлетворяющей шаблону регулярного выражения, в строке.
б) поиска и замены подстроки, удовлетворяющей шаблону регулярного выражения, в строке.
в) проверки на соответствие заданной строки шаблону.
г) извлечения подстроки, удовлетворяющей шаблону регулярного выражения, из строки.
Правила регулярного выражения
· Любой символ обозначает себя самого, если это не метасимвол. Если вам нужно отменить действие метасимвола, то поставьте перед ним '\'.
· Строка символов обозначает строку этих символов.
· Множество возможных символов (класс) заключается в квадратные скобки '[]', это значит, что в данном месте может стоять один из указанных в скобках символов.
· Если первый символ в скобках это '^' - значит ни один из указанных символов не может стоять в данном месте выражения.
· Внутри класса можно употреблять символ '-', обозначающий диапазон символов. Например, a-z - один из малых букв латинского алфавита, 0-9 - цифра и т.д.
· Все символы, включая специальные, можно обозначать с помощью '\'.
· Альтернативные последовательности разделяются символом '|' Заметьте что внутри квадратных скобок это обычный символ.
· Внутри регулярного выражения можно указывать "подшаблоны" заключая их в круглые скобки и ссылаться на них как '\номер' Первая скобка обозначается как '\1'.
Несимвольные условия:
Наиболее употребительными из них являются 2 метасимвола:
^ - начало строки или ввода
$ - конец строки или ввода
Класс символов описывает множество символов, которые принадлежат этому классу.
|
[..] – для описания класса символов, например,[aeiou] – гласные буквы, [0-9] цифры, можно перечислить знаки препинания и пр..
[^..] – описание исключения. Т.е. любые символы, кроме тех, что встречаются в квадратных скобках.
Последовательности
(…) – определяет последовательность символов. Т.е. (abc) соответствует именно фрагменту abc, а не любой из этих букв.
Последовательности автоматически нумеруются, в порядке открывающих скобок.
Исчислители определяют требования к количеству элементов
{n} – повторение предыдущего элемента n раз
{n,} – повторение не менее n раз.
{n,m} – повторение не менее n, но не более m раз
? – соответствует {0,1}
+ - соответствует {1,}
* - соответствует {0,}
Альтернативы
| - соответствие любой из конструкций
Подстановки
$number – подставляет совпадение (последовательности) с номером number.
${name} – подставляет совпадение с именем name.
Пример
” ^([\w-].)*\w+@(((\d{1,3}.){3}\d{1,3})|(\w{2,}.\w{2,3}))$” соответствует email адресу.
1. Понятие указателя. Операции над указателями в C++. Указатели и ссылки. Копирование, сравнение и вычисление длины z-строк.
2. Передача параметров в методы и функции в C++ и C#. Особенности массивов в C++, ReferenceType и ValueType в.Net.
3. Создание и разрушение объектов в C++. Конструктор копирования. Порядок создания производных и составных объектов.
4. Создание и уничтожение объектов в C#. Интерфейс IDisposable и освобождение ресурсов.
5. Особенности наследования в C++ и C#. Роль наследования в программировании.
6. Переопределение операций в C++ и C#. Inline методы и эффективность программ.
7. Статические методы, поля и свойства классов. Их назначение создание в C# (.Net) и C++. Статический конструктор в.Net.
|
8. Ассоциативные и последовательные контейнеры STL. Понятие итератора. Общие свойства контейнеров. Особенности и применение каждого из контейнеров.
9. Использование контейнеров STL. Методы резервирования памяти контейнерами STL. Требования к элементам контейнеров.
10. Hash – таблицы. Поняте hash-функции. Назначение метода GetHashCode в.Net. Назначение и свойства hash-таблиц. Подходы к реализации hash-таблиц.
11. Обобщенные контейнеры.Net. Интерфейс IEnumerable и оператор foreach. Сравнение обобщенных контейнеров и ArrayList.
12. Реализация объектов с подсчетом ссылок. Эффективность создания копий в C++. Другие применения объектов с подсчетом ссылок.
13. Средства обработки текстовых данных. Форматирование строк в C++ и C#. Эффективность формирования строк и класс StringBuilder в C#.
14. Язык регулярных выражений. Классы символов, исчислители, последовательности и несимвольные подстановки. Валидация email адреса при помощи регулярных выражений.
15. Язык регулярных выражений. Классы символов, исчислители, альтернативы и подстановки. Применение регулярных выражений для изменения формата даты.
16. Язык регулярных выражений. Классы символов, исчислители, альтернативы и последовательности. Выбор всех атрибутов href из HTML текста.
17. Обработка исключений. Правила перехвата исключений. Назначение системы обработки исключений. Для чего система обработки исключений не предназначена.
18. Обработка исключений. Различия в обработке исключений в C# и C++. Блок finally. Перехват аппаратных исключений и исключений STL в C++.
|
19. Наследование, иерархии классов и обобщенная обработка данных. Чистый полиморфизм (полиморфизм виртуальных методов). Интерфейсы и абстрактные классы.
20. Рекурсия. Рекуррентные структуры данных и рекурсивные алгоритмы. Алгоритм просмотра дерева каталогов файловой структуры.
21. Рекуррентное определение выражений. Алгоритм анализа и вычисления выражений (программа ”калькулятор”).
22. Понятие сортировки массива. Алгоритм быстрой сортировки массива. Оценка сложности алгоритмов сортировки пузырьком и быстрой сортировки.
23. Понятие расстояния между двумя строками по Левенштейну. Применения данного понятия. Алгоритм вычисления расстояния по Левенштейну. Оценка сложности алгоритма.
24. Разреженные матицы. Область применения. Реализация на основе контейнеров STL. Выбор элементов, операции умножения и сложения матриц.
25. Волновой алгоритм нахождения кратчайшего пути на графе. Его ограничения по сравнению с алгоритмом Дейкстры. Оценка сложности волнового алгоритма.