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




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. Волновой алгоритм нахождения кратчайшего пути на графе. Его ограничения по сравнению с алгоритмом Дейкстры. Оценка сложности волнового алгоритма.

 

12.Реализация объектов с подсчетом ссылок. Эффективность создания копий в C++. Другие применения объектов с подсчетом ссылок. Одним из методов, позволяющих эффективно выполнять копирование – использование подсчета ссылок. объект строится в 2 этапа – объект для приложений и объект для “управления ресурсом”. В нашем примере CStr и _str. _str ведет подсчет ссылок на себя, CStr отвечает за правильное “информирование” _str о его использовании. Теперь при создании копии CStr, достаточно сослаться на тот же экземпляр _str и увеличить у него количество ссылок, а при уничтожении CStr не разрушать _str, а уменьшить количество ссылок. Задача же объектов класса _str правильно подсчитывать количество пользователей и освободить ресурс, когда пользователей больше нет.   Начнем реализацию с класса _str – ответственного за управление памятью. Помимо конструкторов и деструктора, объекты этого класса должны обеспечивать подсчет ссылок. Для этого добавим в него поле для хранения ссылок и два метода, позволяющие вести учет ссылок. class CStr; class _str { char* m_pszData; int m_nCount; friend class CStr; _str () { m_pszData = 0; m_nCount = 1; } _str (const char *p) { m_nCount = 1; m_pszData = new char [strlen(p) + 1]; strcpy (m_pszData, p); } ~_str () { delete []m_pszData;} void AddRef() {m_nCount++;} void Release () {m_nCount--; if(m_nCount==0) delete this;} };   friend class CStr. Это означает, что класс _str объявил своим другом класс CStr, а другу позволено обращаться к закрытым членам класса. Обратим внимание, что в конструкторах счетчик ссылок делается равным 1 Метод AddRef тривиален, а вот Release – уменьшает количество ссылок и если ссылок больше нет, то вызывает деструктор. Деструктор применяется к указателю this. Это зарезервированное слово. This – это указатель на объект, для которого вызван метод.   При рассмотрении реализации CStr убеждаемся, что теперь основная задача конструкторов создать объект управления данными, а деструктор просто освобождает этот объект (уменьшает число пользователей данных). метод len, который вычисляет длину строки. class CStr { _str* m_pStr; public: CStr () {m_pStr = new _str;} CStr (const char * p) {m_pStr = new _str(p);} ~ CStr () { m_pStr -> Release();} int len() const {return (m_pStr->m_pszData)? strlen(m_pStr->m_pszData): 0; } }; Собственно конструктор копии: CStr (const CStr &s) { m_pStr = s. m_pStr; m_pStr->AddRef(); } никакого копирования данных нет. Просто запоминается указатель и увеличивается число ссылок.   Одно из применений подсчета ссылок – быстрое копирование. Подсчет ссылок применяется и в тех случаях, когда реальный ресурс не может быть скопирован, но должен быть освобожден.   15.Язык регулярных выражений. Классы символов, исчислители, альтернативы и подстановки. Применение регулярных выражений для изменения формата даты. См 14 Пример 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+ - целое число

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

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

См14

18.Обработка исключений. Различия в обработке исключений в C# и C++. Блок finally. Перехват аппаратных исключений и исключений STL в C++.

Обработка исключительных ситуаций (англ. exception handling) — механизм языков программирования, предназначенный для описания реакции программы на ошибки времени выполнения и другие возможные проблемы (исключения), которые могут возникнуть при выполнении программы и приводят к невозможности (бессмысленности) дальнейшей отработки программой её базового алгоритма.

Хорошая система обработки ошибок должна:

· предоставлять единый механизм обработки,

· локализовать код обработки ошибок, отделив его от основного алгоритма,

· позволять передавать управление на “компетентный” уровень иерархии программы.

Исключения могут возникать в результате сбоя оборудования, непредвиденных данных, неправильного поведения пользователей и пр.

Общее понятие исключительной ситуации

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

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

- Ошибка при попытке считать данные с внешнего устройства. Если данные не удаётся ввести, любые дальнейшие запланированные операции с ними бессмысленны.

- Исчерпание доступной памяти. Если в какой-то момент система оказывается не в состоянии выделить достаточный для прикладной программы объём оперативной памяти, программа не сможет работать нормально.

- Появление сигнала аварийного отключения электропитания системы. Прикладную задачу, по всей видимости, решить не удастся, в лучшем случае (при наличии какого-то резерва питания) прикладная программа может озаботиться сохранением данных.

- Появление на входе коммуникационного канала данных, требующих немедленного считывания. Чем бы ни занималась в этот момент программа, она должна перейти к чтению данных, чтобы не потерять поступившую информацию.

Различия в С++ и C# - в наличие в С# блока finally

Освобождение ресурсов, занятых try -блоком, выполняет finally -блок.

В языке С++ эта работа требовала вызова деструкторов объектов. В C#, благодаря автоматической сборке мусора, освобождением памяти можно не заниматься, достаточно освободить стек. Но в блоке try могли быть заняты другие ресурсы - открыты файлы, захвачены некоторые устройства. Освобождение ресурсов, занятых try -блоком, выполняет finally -блок. Если он присутствует, он выполняется всегда, сразу же после завершения работы try -блока



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-12-07 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: