1 / 18

Регулярни изрази

Регулярни изрази. Светлин Наков Георги Пенков. Българска асоциация на разработчиците на софтуер. www.devbg.org. Съдържание. Какво са регулярните изрази? Езикът на регулярните изрази Валидация чрез регулярни изрази Парсване на текст Замяна в текст Езици и платформи Полезни съвети

jessie
Download Presentation

Регулярни изрази

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Регулярни изрази Светлин Наков Георги Пенков Българска асоциация на разработчиците на софтуер www.devbg.org

  2. Съдържание • Какво са регулярните изрази? • Езикът на регулярните изрази • Валидация чрез регулярни изрази • Парсване на текст • Замяна в текст • Езици и платформи • Полезни съвети • Връзки по темата

  3. Какво са регулярните изрази? • Мощно средство за обработка на текст • Служат за: • Извличане на информация от текст по зададен шаблон (regexp pattern) • Валидация на текстова информация • Променяне/изтриване на поднизове в текст • Компактен синтаксис

  4. Още за регулярните изрази • Интуитивен подход • Спестяват време, усилия и код • Ефективни • Преобразуват се до крайни автомати (Finite State Machine) • Предпочитан избор при боравене с текст • Поддържатсе от всевъзможни езици и платформи

  5. Какво е регулярен израз? • Регулярните изрази са специални символни низове, които: • Дефинират шаблон определящ множество от низове (даден регулярен език) • Използват специален “regex” синтаксис за описанието на шаблоните • Regex синтаксисът • Еднакъв на всички платформи (с малки изключения) • Производен на Perl синтаксиса

  6. Примери за рег. изрази • Шаблон, описващ всички непразни низове, които се състоят само от цифрите 0 и 1: • Всички телефонни номера имащи формат 088XXXXXXX (където X е цифра) • Име на домейн в .bg зоната [0-1]+ 088[0-9]{7} ([A-Za-z0-9-]+\.)+bg

  7. Езикът на регулярните изрази • Състои се от литерали и метасимволи • Литерали – константи, които задават точно определен подниз • Метасимволи – описват символни класове или задават специални правила в шаблона • Класове от символи, напр. [a-zA-Z], \w, \W, \d, \s • За количество (quantifiers), напр. *, +, {8,10} • За местоположение, напр. \b, \A, \z, ^, $ • За алтернативен избор – | (логическо "или") • За групиране – (, ), напр. ([0-9]+) • Escaping последователности, напр. \* , \n

  8. Валидация на числа с .NET using System; using System.Text.RegularExpressions; public class RegExSample { static void Main(string[] args) { string s = "1234"; string pattern = @"\A[1-9][0-9]*\z"; if (Regex.IsMatch(s, pattern)) Console.WriteLine("{0} is valid number", s); else Console.WriteLine("Invalid number: {0}", s); } }

  9. Валидация на имена с Perl • Очакваме име и фамилия, на кирилица с главна начална буква, напр. “Ангел Борисов“ • Валидация на потребителско имес дължина от 8 до 32 символа, съставено от латински букви, цифри и “_” : $name = "Ангел Борисов"; $pattern = '^([А-Я][а-я]+)\s([А-Я][а-я]+)$'; if ($name =~ /$pattern/) { ... } if ($username !~ /^[\w\d]{8,32}$/) { print "Invalid username!"; }

  10. Парсване на текст с .NET • Даден е текст във формат: • Използваме регулярни изрази и групи: <име на потребител> <IP адрес> <време в системата> String text = "root 193.168.22.18 22:12:38\n" + "nakov 217.9.231.126 00:07:24"; string pattern = @"(?<name>\S+)\s+(?<ip>[0-9\.]+)\s+(?<time>[0-9:]+)"; MatchCollection matches = Regex.Matches(text, pattern); foreach (Match m in matches) { Console.WriteLine("name={0,-8} ip={1,-16} time={2}", m.Groups["name"], m.Groups["ip"],m.Groups["time"]); }

  11. Заменяне на & с &amp; с Perl • Искаме да заменим всички символи & със съответното им HTML entity: &amp; • Задачата не е тривиална: • Не трябва да бъдат променяни съществуващи HTML entities (напр. &quot; или &#160;). # Входът идва от STDIN, а изходът е към STDOUT while (<STDIN>) { s/&(?![a-zA-Z]{2,6};|#[0-9]{3,5};)/&amp;/g; print; }

  12. Замяна на тагове с .NET • Да се заменят таговете [URL=…] … [/URL] с HTML хипервръзки <a href = …> … </a>: static void Main() { String text = "Here is the link with logo:<br>" + "[URL=http://www.devbg.org][IMG]\n" + "http://www.devbg.org/logo.gif[/IMG][/URL]\n"; string pattern = @"\[URL=(?<url>[^\]]+)\]" + @"(?<content>(.|\s)*?)\[/URL\]"; string newPattern = "<a href=\"${url}\">${content}</a>"; string newText = Regex.Replace(text, pattern, newPattern); Console.WriteLine(newText); }

  13. Тлъст, сложен, но пък пояснен regexp пример #!/usr/bin/perl $a ='Da teeeeesttt sux 1000000 (million) timesssss '; $a =~ /^.+?(e+)([\D\s]+)(\d{5,10}\s)(.*)i.*?s.*$/; Da teeeeesttt sux 1000000 (million) timesssss (е+) (\d{5,10}\s) .* .+? (.*) ^ $ .*? ([\D\s]+) i s $1 $2 $3 $4

  14. Езици и платформи • Регулярни изрази се поддържат навсякъде: • Perl • .NET Framework (C#, VB.NET, …) • Java • PHP • JavaScript • Delphi • C, C++

  15. Полезни съвети • Избягвайте сложни регулярни изрази • Проверете дали някой вече не е писал регулярен израз за вашия проблем • Решението може да е по-пълно от вашето • Съществуват готови рег. изрази: • Описващи URL адреси; • За валидация на e-mail адреси; • За проверка формата на IP адреси; • Много други • Не се доверявайте – има и грешни!

  16. Полезни съвети • Разбивайте проблема на части • Пишете по-прости регулярни изрази за всяка част • Пишете прегледни регулярни изрази форматирани прегледно, ако трябва на няколко реда • Пример: изваждане на всички изречения с главни букви: • Извадете изреченията • Проверете всяко дали е с главни букви

  17. Връзки по темата • http://en.wikipedia.org/wiki/Regular_expression Що е то Regular Expression според Wikipedia • http://www.regexlib.com/ Библиотека с готови регулярни изрази (понастоящем над 1000) • http://regex.osherove.com/ The Regulator – безплатен инструмент за създаване и тестване на регулярни изрази • http://perl.plover.com/Regex/ Как работи regex машината – с картинки и примери • http://www.weitz.de/regex-coach/ The Regex Coach

  18. Регулярни изрази Събудете се! Въпроси?

More Related