Презентация на тему "Регулярные выражения"

Презентация: Регулярные выражения
Включить эффекты
1 из 26
Ваша оценка презентации
Оцените презентацию по шкале от 1 до 5 баллов
  • 1
  • 2
  • 3
  • 4
  • 5
4.2
2 оценки

Комментарии

Нет комментариев для данной презентации

Помогите другим пользователям — будьте первым, кто поделится своим мнением об этой презентации.


Добавить свой комментарий

Аннотация к презентации

Скачать презентацию (2.81 Мб). Тема: "Регулярные выражения". Предмет: информатика. 26 слайдов. Добавлена в 2017 году. Средняя оценка: 4.2 балла из 5.

Содержание

  • Презентация: Регулярные выражения
    Слайд 1

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

    Кто они такие и с чем их едят? Примеры паттернов на JavaScript ФБОУ ВПО «Санкт-Петербургский государственный университет Водных коммуникаций»Кафедра вычислительных систем и информатики Работу выполнила: студентка факультета информационных технологий, группы ИС-41 Ненастьева Т.Г. Руководитель : к.т.н., доц. Попов Б.Н.

  • Слайд 2

    Кто такие RegEx?

    Регулярные выражения (англ. regular expressions, сокр. RegExp, RegEx, жарг. регэкспы или регексы) — это формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов (символов-джокеров, англ. wildcard characters); строка-образец (англ. pattern, по-русски её часто называют «шаблоном», «маской»), состоящая из символов и метасимволов и задающая правило поиска.

  • Слайд 3

    Немного истории 

    Регулярные выражения произвели прорыв в электронной обработке текстов в конце XX века. Набор утилит (включая текстовый редактор sed и фильтр grep), поставляемых в дистрибутивах UNIX, одним из первых способствовал популяризации регулярных выражений для обработки текстов. Многие современные языки программирования имеют встроенную поддержку регулярных выражений. Среди них ActionScript, Perl, Java, PHP, JavaScriptPython, Ruby, C++(стандарт 2011 года) и др. Регулярные выражения используются некоторыми текстовыми редакторами и утилитами для поиска и подстановки текста.

  • Слайд 4

    Немного истории

    Истоки регулярных выражений лежат в теории автоматов, теории формальных языков и классификации формальных грамматик по Хомскому. Эти области изучают вычислительные модели (автоматы) и способы описания и классификации формальных языков. В 1940-х гг. УорренМакКаллоки Уолтер Питтс описали нервную систему, используя простой автомат в качестве модели нейрона. Уоррен МакКаллок(1898 - 1969) Уолтер Питтс (1923 - 1969)

  • Слайд 5

    Математик Стивен Клини позже описал эти модели, используя свою систему математических обозначений, названную «регулярные множества». Кен Томпсон встроил их в текстовый редактор QED, а затем в редактор ed под UNIX.С этого времени регулярные выражения стали широко использоваться в UNIX и UNIX-подобных утилитах, например:expr, awk, Emacs, vi (visual), lex. Клини Стивен Коул (1909 - 1994) Кен Томпсон(р. 1943)

  • Слайд 6

    РВ на JavaScript

    Регулярные выражения также стали использоваться и в языках: Perl (Practical Extraction and Report Language — «практический язык для извлечения данных и составления отчётов»); Tcl (Tool Command Language — «командный язык инструментов»).   Регулярные выражения в Perl и Tcl происходят от реализации, написанной Генри Спенсером. Филип Хейзел разработал библиотеку PCRE (англ. Perl-compatible regular expressions — Perl-совместимые регулярные выражения), которая используется во многих современных инструментах, таких как PHP и Apache. Генри Спенсер Филип Хейзел

  • Слайд 7

    Регулярное выражение на JavaScript -

     - это инструкция, описывающая на специально разработанном языке (RegExp) закон "сходства" искомой строки с образцом. Для чего это нужно? Например: Для организации поиска в тексте чего-либо. Для замены одной части подстрок другими. Для проверки корректности пользовательского ввода. Способы задания РВ

  • Слайд 8

    Способы задания регулярных выражений

    Существует два способа задания регулярных выражений: в объектной нотации – new RegExp("pattern"[, флаги]); в литеральной нотации – varp=/pattern/flags;   где pattern - шаблон, является основой регулярного выражения, определяющей критерии сопоставления строк. Состоит из литералов и метасимволов. flags - флаги (модификаторы), задают дополнительные параметры сопоставления шаблона. g — глобальный поиск (обрабатываются все совпадения с шаблоном поиска); i — не различать строчные и заглавные буквы; m — многострочный поиск. Символы, используемы е в РВ. Литералы

  • Слайд 9

    Символы, используемые в РВ

    Литералы(обычные символы – буквы, цифры) Каждый из таких символов представляет сам себя. Например, /abc/ - такому шаблону сопоставима только строка "abc". a-z - все строчные буквы от a до z. Например, /a-z/ - такому шаблону сопоставляются 26 строк: "a", "b", "c"... "z" A-Z - все заглавные буквы от A до Z. 0-9 - все цифры. Символы-квантификаторы 

  • Слайд 10

    Символы, используемые в РВ (продолжение)

    Управляющие (квантификаторы) \ - служит для экранирования специальных символов, т.е. обратный слэш перед символом указывает на то, что он должен интерпретироваться как специальный. * - указывает, что символ (или часть шаблона, если она заключена в квадратные скобки) может повторяться 0 и более раз. Например, /ab*c/ - означает, что строка начинается с символа a, затем может быть сколько угодно символов b, после которых следует символ c. Т.е. это могут быть, например, такие строки: "ac", "abc", "abbbbbbc" и т.д. + - указывает, что символ (или часть шаблона, если она заключена в квадратные скобки) может повторяться 1 и более раз. Например, /ab+c/ - означает, что строка начинается с символа a, затем может быть сколько угодно символов b (но не меньше 1), после которых следует символ c. Т.е. это могут быть, например, такие строки: "abc", "abbbbbbc" и т.д.

  • Слайд 11

    . - указывает, что на этом месте может быть любой одиночный символ, кроме символа новой строки. Например, для шаблона /ab.c/ сопоставимы такие строки: "ab6c", "abxc", "ab=c" и т.д. ? - указывает, что символ (или часть шаблона, если она заключена в квадратные скобки) может повторяться 0 или 1 раз. Например, /ab?c/ - означает, что строка начинается с символа a, затем может быть или не быть один символ b, после которого следует символ c. Т.е. это могут быть такие строки: "ac", "abc".

  • Слайд 12

    {n} - указывает, что символ (или часть шаблона, если она заключена в квадратные скобки) может повторяться ровно n раз. Например, /ab{3}c/ - означает, что строка начинается с символа a, затем идут 3 символа b, после которых следует символ c. Т.е. это будет строка "abbbc". {n,} - указывает, что символ (или часть шаблона, если она заключена в квадратные скобки) может повторяться n и более раз. Например, /ab{3,}c/ - означает, что строка начинается с символа a, затем идут 3 или более символов b, после которых следует символ c. Т.е. это могут быть такие строки: "abbbc", "abbbbbbbc" и т.д. {n, m} - указывает, что символ (или часть шаблона, если она заключена в квадратные скобки) может повторяться от n до m раз. Например, /ab{1,3}c/ - означает, что строка начинается с символа a, затем идут от 1 до 3 символов b, после которых следует символ c. Т.е. это могут быть такие строки: "abc", "abbc", "abbbc". Символы, используемые в РВ (продолжение)

  • Слайд 13

    [] - такой шаблон сопоставим с любым одиночным символом, принадлежащим множеству, определенному в скобках. Множество задается перечислением или указанием диапазона. Например, шаблону /[abc]/ могут быть сопоставимы строки: "a", "b", "c". [^] - такой шаблон сопоставим с любым одиночным символом, не принадлежащим множеству, определенному в скобках. Например, шаблону /[^abc]/ могут быть сопоставимы строки: "f", "x", "Z", но не могут быть сопоставимы строки: "a", "b", "c". | - указывает на несколько альтернативных шаблонов. Например, шаблону /ab|c/ будут сопоставимы строки: "ab" и "c". Символы, используемые в РВ (продолжение)

  • Слайд 14

    ^ - указывает, что символы сопоставимы с началом строки. Например, шаблону /^abc/ могут быть сопоставимы строки: "abcd", "abcfh", но не могут быть сопоставимы строки: "dabc", "cbabc" и т.д. $ - указывает, что символы сопоставимы с концом строки. Например, шаблону /abc$/ могут быть сопоставимы строки: "dabc", "fhabc", но не могут быть сопоставимы строки: "abcd", "abccb" и т.д. Символы, используемые в РВ (продолжение) Метасимволы 

  • Слайд 15

    Метасимволы (специальные символы, обозначают диапазон литералов, например «цифры», «буквы латинского алфавита», «заглавные буквы», «видимые символы» и др.) \d - соответствует любая цифра от 0 до 9. \D - соответствует все, кроме цифры. \s - соответствует пробел. \S - соответствует все, кроме пробела. \w - соответствует буква, цифра или знак подчеркивания. \W - соответствует все, кроме буквы, цифры или знака подчеркивания. Например, шаблону /x\d\d/ будут соответствовать строки: "x01", "x25" и т.д., но не будут соответствовать строки: "A15", "x0A". Также обратный слэш используется, чтобы специальный символ сделать литеральным. Например, если нам нужно найти строку "a*b", то мы зададим следующий шаблон: /a\*b/. Символы, используемые в РВ (продолжение) Простой пример 

  • Слайд 16

    ПРИМЕР 1

     var par=/[0-9a-z]+/i;  Здесь [0-9a-z]+ - шаблон, буквально означающий следующее «любое количество цифр и букв 1 и более раз» (как задавать шаблон посмотрим чуть ниже). i - флаг, означающий, что регистр символов не имеет значение. Сложный пример 

  • Слайд 17

    ПРИМЕР 2

    Предположим, что у нас есть форма, куда пользователь вводит свой e-mail и пароль. Мы хотим, чтобы при нажатии на кнопку «Зарегистрировать» осуществлялась проверка корректности ввода. Код html-страницы будет следующим: 

    Форма регистрации E-mail: Password:  
  • Слайд 18

    Итак, что же должна сделать функция prov_adress()? Для начала нам нужны две переменные, в которые мы поместим значения, введенные пользователем:   function prov_adress(obj) { varadr=obj.mail.value; var par=obj.pas.value; } РВ для e-mailи пароля

  • Слайд 19

    Теперь нам нужно задать образцы (регулярные выражения), с которыми мы и будем сравнивать то, что ввел пользователь. Здесь я их просто приведу, о том, как их составлять, расскажу позже:  function prov_adress(obj) { varadr=obj.mail.value; var par=obj.pas.value; varadr_pattern=/[0-9a-z_]+@[0-9a-z_]+\.[a-z]{2,5}/i; varpar_pattern=/[0-9a-z]+/i; } Метод test()

  • Слайд 20

    Теперь осуществляем проверку на сопоставление образцу. Для этого воспользуемся методом test() объекта RegExp:  function prov_adress(obj) { varadr=obj.mail.value; var par=obj.pas.value; varadr_pattern=/[0-9a-z_]+@[0-9a-z_]+\.[a-z]{2,5}/i; varpar_pattern=/[0-9a-z]+/i; varprov=adr_pattern.test(adr); var prov1=par_pattern.test(par); } Результат проверки

  • Слайд 21

    Строка adr_pattern.test(adr) означает следующее: проверить существование в строке adr последовательности, сопоставляющейся с регулярным выражением adr_pattern. Метод test() возвращает логическое значение (true или false). Нам осталось только указать в нашей функции, что делать в случае успешной (или неуспешной) проверки:  function prov_adress(obj) { varadr=obj.mail.value; var par=obj.pas.value; varadr_pattern=/[0-9a-z_]+@[0-9a-z_]+\.[a-z]{2,5}/i; varpar_pattern=/[0-9a-z]+/i; varprov=adr_pattern.test(adr); var prov1=par_pattern.test(par); if (prov==true && prov1==true) { alert("Вы зарегистрированы!"); } else { alert("Введенные данные некорректны!"); } } РВ для пароля

  • Слайд 22

    Прежде, чем проверить работу нашего сценария, посмотрим, из чего же состоят наши регулярные выражения. Возьмем регулярное выражение для нашего пароля - /[0-9a-z]+/i: /[0-9a-z]+/ - шаблон, в котором: 0-9 - любая цифра. a-z - любая строчная буква от a до z. [] - квадратные скобки означают, что в шаблоне может присутствовать любой из перечисленных в них литералов (в нашем случае цифры и строчные буквы) + - указывает, что данная часть шаблона (т.е. то, что в квадратных скобках) может повторяться один и более раз. i - флаг, означающий, что регистр символов не имеет значение. Иными словами, наше регулярное выражение указывает, что пароль может содержать любое количество цифр и букв 1 и более раз (т.е. он может состоять из одной цифры, из одной буквы, из многих цифр, из многих букв, из цифр и букв). Например, если пользователь введет в поле пароля "2", "a3b" или "leopard", то такой пароль будет считаться корректным. А если, он введет "ab&s" или "24?", то такой пароль корректным считаться не будет, т.к. он содержит спецсимволы, а мы их в регулярном выражении не разрешили. РВ для e-mail

  • Слайд 23

    Давайте, например, посмотрим, что же мы написали для шаблона e-mail в нашем примере:  varadr_pattern=/[0-9a-z_]+@[0-9a-z_]+\.[a-z]{2,5}/i; Итак, мы указали, что в адресе электронной почты идут цифры, буквы и знаки подчеркивания 1 и более раз, затем следует символ @, затем снова идут цифры, буквы и знаки подчеркивания 1 и более раз, затем идет символ точки, после которой идут буквы от 2 до 5 раз. Примерно такой вид имеют адреса электронной почты. файл

  • Слайд 24

    Другие примеры РВ

    Только цифра: varonly_num_pattern=/[0-9]/; Только латинская буква: varonly_lat_pattern=/[A-Za-z]/; Только русская буква: var only_rus_pattern=/[А-Яа-я]/; Только 5 символов:varonly_five_pattern=/[0-9A-Za-z]{5}/; Не менее n символов:varunless_than_n=/[0-9A-Za-z]{n,}/; Не более n символов:varnot_more_than_n=/[0-9A-Za-z]{0,n}/; От n до m символов:varfrom_n_to_m_pattern=/[0-9A-Za-z]{n,m}/;

  • Слайд 25

    ВСЁ 

    иллюстрации - Maria-van-Bruggen

  • Слайд 26

    Источники:

    http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F http://blog.stevenlevithan.com/archives/regex-legends http://www.hq.nasa.gov/alsj/henry.html http://chernykh.net/content/view/261/460/ http://javascript.ru/RegExp Для валидаторов объектов, дополнительно - http://www.site-do.ru/js/js14.php

Посмотреть все слайды

Сообщить об ошибке