Регулярные выражения Денис С. Мигинский. Происхождение регулярных выражений Регулярные выражения – язык предназначенный для синтаксического разбора текстовых.

Презентация:



Advertisements
Похожие презентации
RegExp Регуля́рные выраже́ния (англ. regular expressions, сокр. RegExp, RegEx, жарг. регэ́кспы или ре́гексы) это формальный язык поиска и осуществления.
Advertisements

Занятие Регулярные выражения Памятка (основные элементы регулярных выражений): a+ – любая последовательность a a* – любая последовательность a или.
JavaScript Регулярные выражения Введение Создание регулярных выражений Флаги (способы поиска по шаблону) Метасимволы Специальные символы Квантификаторы.
UNIX: регулярные выражения, POSIX/PCRE, GREP, SED.
Язык Ruby Денис С. Мигинский. Ruby Создан Юкихиро Мацумото в 1995 г. В основу положены элементы языков Perl, Python, Lisp, Smalltalk и др., а также «принцип.
Функция вычисляет и возвращает результат в зависимости от исходных данных (аргументов).
Регулярные выражения. Регулярные выражения это один из способов поиска подстрок (соответствий) в строках. Используются для: проверки наличия соответствующей.
Запросы в базе данных. Понятия запроса При работе с таблицами можно в любой момент выбрать из базы данных необходимую информацию с помощью запросов. Запрос.
Строки в Pascal
Символы и строки. Процедуры и функции работы со строками.
Основы алгоритмизации и программирования Чабанюк Виктория 10 класс.
Строка в Turbo Pascal - упорядоченная последовательность символов.
Язык Ruby Денис С. Мигинский. Ruby Создан Юкихиро Мацумото в 1995 г. В основу положены элементы языков Perl, Python, Lisp, Smalltalk и др., а также «принцип.
Строки, Списки, Кортежи.. Строки (string) Строка-это последовательность букв Для обозначения строки используются одинарные или двойные кавычки. Для длинных.
Организация программ разветвляющейся структуры. Условный оператор.
ОБЩИЕ СВЕДЕНИЯ О ЯЗЫКЕ ПРОГРАММИРОВАНИЯ ПАСКАЛЬ НАЧАЛА ПРОГРАММИРОВАНИЯ.
Строковые константы записываются как последовательности символов, ограниченные апострофами. Пример: 'Текстовая строка' Пустой символ обозначается двумя.
(Выполнила Войтюлевич Ольга Гимназия 1). Символьный тип данных Для работы с символами в языке Pascal предусмотрен специальный тип данных, который называется.
С ИМВОЛЬНЫЕ И С ТРОКОВЫЕ ВЕЛИЧИНЫ. О ГЛАВЛЕНИЕ Символьные и Строковые величины Сравнение переменных Сложение переменных Функция Concat Функция Concat.
Программирование типовых алгоритмов вычислений Информатика.
Транксрипт:

Регулярные выражения Денис С. Мигинский

Происхождение регулярных выражений Регулярные выражения – язык предназначенный для синтаксического разбора текстовых фрагментов. Является развитием wildcard- characters. Одни из первых реализаций – утилиты sed и grep. Версии: Basic regular expressions (устаревшие) POSIX regular expressions Perl-compatible regular expressions

Задача Требуется по известному URL выделить тип протокола, домен, путь URL=

Разбор URL url = ' rx = /^(\w+):\/\/([\w\.]+)([\/\w~]+)$/ res = Hash.new begin res['proto'], res['domain'], res['path'] = url.match(rx).captures res.each{|key, field| puts "#{key} = #{field}" } rescue Exception puts 'ERROR: incorrect URL' end

Соответствие строки шаблону http : / /ccfit.nsu.ru /~shadow/DT6 ^(\w+):\/\/([\w\.]+) ([\/\w~]+) $ ^ - начало строки \w - произвольная буква/цифра \w произвольных букв/цифр (\w+) - искомая подстрока [\w\.] - любая буква/цифра/'.' [\w\.] букв/цифр/'.' [\/\w~] - 1+ '\', букв, цифр, '~' $ - конец строки

Классы символов [] – класс символов [^]– дополнение класса символов \w – буква или цифра [A-Za-z0-9_] \W - не \w [^\w] \d – цифра [0-9] \D - не цифра [^\d] \s – любой разделитель. – произвольный символ

Символы позиционирования ^ - начало строки $ - конец строки \b - граница слова \B – не граница слова

Ruby API md= "Иван IV родился 15 августа 1530 года". match(/(\d+)\s+([а-яА-Я]+)\s+(\d+)/) puts md.class #MatchData puts md.captures == md[1..3]#true puts md[1] == md.captures[0]#true md[0] #String md.captures #Array md[1] md[3] md[2] md.pre_match md.post_match

Ruby API String::match(pattern)=>matchdata or nil Regexp::match(string)=>matchdata or nil MatchData:: [](i)=>string captions=>array pre_match=>string post_match=>string

Perl-style Ruby API String::=~(pattern)=>index or nil md[0]=> $&, $~ md[1..9] => $1, … $9 md.pre_match => $` md.post_match => $

Повторы #x – произвольный символ или класс х – ровно один символ x+ - как минимум один символ x+? - как минимум один символ («нежадный») x* - любое количество символов x*? - любое количество символов («нежадный») x? – не более одного символа x{m,n} – от m до n символов x{m,} – не менее m символов x{m} – ровно m символов

Жадные и нежадные регулярные выражения #обе группы жадные "12345".match(/(\d+)(\d+)/) #2-ая группа жадная "12345".match(/(\d+?)(\d+)/) #обе группы нежадные "12345".match(/(\d+?)(\d+?)/)

Опции регулярных выражений /rx/imx i – игнорировать регистр m – разбирать текст как многострочный с m ^, $ срабатывают на \n, в противном случае только в начале и конце текста x – расширенное регулярное выражение

Расширенные регулярные выражение #обычное регулярное выражение rx = /^(\w+):\/\/([\w\.]+)([\/\w~]+)$/ #расширенное регулярное выражение: #игнорируются разделители, допускаются комментарии rx = /^ (\w+) #protocol :\/\/ #:// ([\w\.]+) #domain ([\/\w~]+) #path $/x

Замена на основе регулярных выражений str="plum is purple, apple is green" colour='purple|green' puts str.sub(/#{colour}/, "coloured") #plum is coloured, apple is green puts str.gsub(/#{colour}/, "coloured") #plum is coloured, apple is coloured puts str.sub(/(#{colour})(.*)\1/, '\3\2\1') #plum is green, apple is purple

Другие операции на основе регулярных выражений #возвращает все подстроки, удовлетворяющие шаблону (regex или строка) String::scan(pattern)[{|match,...| block}] =>array #разделяет исходную строку на подстроки по шаблону (regex или строка) String::split(pattern[,limit])=>array #выделяет первое совпадение с шаблоном String::slice(regex)=>string String::[](regex) =>string

Задача 3 Вариант 1: Написать программу, разбирающую журнал событий (например, журнал web-сервера, syslog и т.д.) и вычисляющий ежемесячную статистику в зависимости от содержимого выбранного журнала (например, обращения с различных IP-адресов, ошибки различных типов, аутентификацию пользователей и т.д.) Вариант 2: По детализации звонков (предварительно преобразованным в текстовый формат) своего сотового оператора за несколько месяцев сделать расчет финансовых затрат по нескольким различным тарифам. Допускается использовать не все параметры тарифа, только наиболее важные (например, абонентская плата, стоимость звонков, дифференцированная по различным видам номеров).