bars - regular expressions - svetlin nakov, george penkov

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

Upload: svetlin-nakov

Post on 12-Jun-2015

2.121 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: BARS - Regular Expressions - Svetlin Nakov, George Penkov

Регулярни изразиРегулярни изразиСветлин НаковГеорги Пенков

Светлин НаковГеорги Пенков

Българска асоциация на разработчиците на софтуерБългарска асоциация на разработчиците на софтуер

www.devbg.orgwww.devbg.org

Page 2: BARS - Regular Expressions - Svetlin Nakov, George Penkov

СъдържаниеСъдържание

• Какво са регулярните изрази?Какво са регулярните изрази?

• Езикът на регулярните изразиЕзикът на регулярните изрази

• Валидация чрез регулярни изразиВалидация чрез регулярни изрази

• Парсване на текстПарсване на текст

• Замяна в текстЗамяна в текст

• Езици и платформиЕзици и платформи

• Полезни съветиПолезни съвети

• Връзки по тематаВръзки по темата

Page 3: BARS - Regular Expressions - Svetlin Nakov, George Penkov

Какво са регулярните изрази?Какво са регулярните изрази?

• Мощно средство за обработка на текстМощно средство за обработка на текст

• Служат за:Служат за:

• Извличане на информация от текст по Извличане на информация от текст по зададен шаблон (зададен шаблон (regexp pattern)regexp pattern)

• Валидация на текстова информацияВалидация на текстова информация

• Променяне/изтриване на поднизове в Променяне/изтриване на поднизове в тексттекст

• Компактен синтаксисКомпактен синтаксис

Page 4: BARS - Regular Expressions - Svetlin Nakov, George Penkov

Още за регулярните изразиОще за регулярните изрази

• Интуитивен подходИнтуитивен подход

• Спестяват време, усилия и код Спестяват време, усилия и код

• ЕфективниЕфективни

• Преобразуват се до крайни автомати Преобразуват се до крайни автомати ((Finite State Machine)Finite State Machine)

• Предпочитан избор при боравене с текстПредпочитан избор при боравене с текст

• ПоддържатПоддържат се от всевъзможни езици и се от всевъзможни езици и платформиплатформи

Page 5: BARS - Regular Expressions - Svetlin Nakov, George Penkov

Какво е регулярен израз?Какво е регулярен израз?

• Регулярните изрази са специални символни Регулярните изрази са специални символни низове, които:низове, които:

• Дефинират шаблон определящ множество Дефинират шаблон определящ множество от низове (даден регулярен език)от низове (даден регулярен език)

• Използват специален Използват специален “regex” “regex” синтаксис за синтаксис за описанието на шаблонитеописанието на шаблоните

• Regex Regex синтаксисътсинтаксисът

• Еднакъв на всички платформи (с малки Еднакъв на всички платформи (с малки изключения)изключения)

• Производен на Производен на Perl Perl синтаксисасинтаксиса

Page 6: BARS - Regular Expressions - Svetlin Nakov, George Penkov

Примери за рег. изразиПримери за рег. изрази

• Шаблон, описващ всички непразни низове, Шаблон, описващ всички непразни низове, които се състоят само от цифрите които се състоят само от цифрите 00 и и 11::

• Всички телефонни номера имащи формат Всички телефонни номера имащи формат 088XXXXXXX088XXXXXXX (където (където XX е цифра) е цифра)

• Име на домейн в Име на домейн в .bg.bg зоната зоната

[0-1]+

088[0-9]{7}

([A-Za-z0-9-]+\.)+bg

Page 7: BARS - Regular Expressions - Svetlin Nakov, George Penkov

Езикът на регулярните изразиЕзикът на регулярните изрази

• Състои се от Състои се от литералилитерали и и метасимволиметасимволи

• ЛитералиЛитерали – константи, които задават точно – константи, които задават точно определен поднизопределен подниз

• МетасимволиМетасимволи – описват символни класове или – описват символни класове или задават специални правила в шаблоназадават специални правила в шаблона

• Класове от символи, напр. Класове от символи, напр. [a-zA-Z][a-zA-Z], , \w\w, , \W\W, , \d\d, , \s\s

• За количество (quantifiers), напр. За количество (quantifiers), напр. **, , ++, , {8,10}{8,10}

• За местоположение, напр. За местоположение, напр. \b\b, , \A\A, , \z\z, , ^̂, , $$

• За алтернативен избор – За алтернативен избор – || (логическо "или") (логическо "или")

• За групиране – За групиране – ((, , )), напр. , напр. ([0-9]+)([0-9]+)

• Escaping последователности, напр. Escaping последователности, напр. \*\* , , \n\n

Page 8: BARS - Regular Expressions - Svetlin Nakov, George Penkov

Валидация на числа с Валидация на числа с .NET.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); }}

Page 9: BARS - Regular Expressions - Svetlin Nakov, George Penkov

Валидация на имена с Валидация на имена с PerlPerl

• Очакваме име и фамилия, на кирилица с главна Очакваме име и фамилия, на кирилица с главна начална букваначална буква, , напр. “Ангел Борисов“напр. “Ангел Борисов“

• Валидация на потребителско имеВалидация на потребителско име с дължина от 8 до 32 с дължина от 8 до 32 символа, съставено от латински букви, цифри и символа, съставено от латински букви, цифри и “_”“_” : :

$name = "Ангел Борисов";$pattern = '^([А-Я][а-я]+)\s([А-Я][а-я]+)$';if ($name =~ /$pattern/) { ... }

if ($username !~ /^[\w\d]{8,32}$/){ print "Invalid username!";}

Page 10: BARS - Regular Expressions - Svetlin Nakov, George Penkov

Парсване на текст с Парсване на текст с .NET.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"]);}

Page 11: BARS - Regular Expressions - Svetlin Nakov, George Penkov

Заменяне на Заменяне на && с с &amp;&amp; с с PerlPerl

# Входът идва от STDIN, а изходът е към STDOUT

while (<STDIN>){ s/&(?![a-zA-Z]{2,6};|#[0-9]{3,5};)/&amp;/g; print;}

• Искаме да заменим всички символи Искаме да заменим всички символи && със със съответното им HTML entity: съответното им HTML entity: &amp;&amp;

• Задачата не е тривиална:Задачата не е тривиална:

• Не трябва да бъдат променяни съществуващи Не трябва да бъдат променяни съществуващи HTML entities (напр. HTML entities (напр. &quot;&quot; или или &#160&#160;;).).

Page 12: BARS - Regular Expressions - Svetlin Nakov, George Penkov

Замяна на тагове с Замяна на тагове с .NET.NET

• Да се заменят таговете Да се заменят таговете [URL=…] … [/URL][URL=…] … [/URL] с с HTML хипервръзки HTML хипервръзки <a href = …> … </a><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);}

Page 13: BARS - Regular Expressions - Svetlin Nakov, George Penkov

Тлъст, сложен, но пък пояснен Тлъст, сложен, но пък пояснен regexp примерregexp пример

Da teeeeesttt sux 1000000 (million) timesssss

^ $

(е+)

([\D\s]+)

.+? (\d{5,10}\s) (.*)

i

.*?

s

.*

$1 $2 $3 $4

#!/usr/bin/perl$a ='Da teeeeesttt sux 1000000 (million) timesssss ';$a =~ /^.+?(e+)([\D\s]+)(\d{5,10}\s)(.*)i.*?s.*$/;

Page 14: BARS - Regular Expressions - Svetlin Nakov, George Penkov

Езици и платформиЕзици и платформи

• Регулярни изрази се поддържат Регулярни изрази се поддържат навсякъде:навсякъде:

• PerlPerl

• .NET Framework (C#, VB.NET, …).NET Framework (C#, VB.NET, …)

• JavaJava

• PHPPHP

• JavaScriptJavaScript

• DelphiDelphi

• C, C++C, C++

Page 15: BARS - Regular Expressions - Svetlin Nakov, George Penkov

Полезни съветиПолезни съвети

• Избягвайте Избягвайте сложнисложни регулярни изрази регулярни изрази

• Проверете дали някой вече не е писал Проверете дали някой вече не е писал регулярен израз за вашия проблемрегулярен израз за вашия проблем

• Решението може да е Решението може да е по-пълнопо-пълно от вашето от вашето

• Съществуват готови рег. изрази:Съществуват готови рег. изрази:

• Описващи Описващи URLURL адреси; адреси;

• За валидация на За валидация на ee--mail mail адреси;адреси;

• За проверка формата на За проверка формата на IPIP адреси; адреси;

• Много другиМного други

• Не се доверявайте – има и грешни!Не се доверявайте – има и грешни!

Page 16: BARS - Regular Expressions - Svetlin Nakov, George Penkov

Полезни съветиПолезни съвети

• Разбивайте проблема на частиРазбивайте проблема на части

• Пишете по-прости регулярни изрази за Пишете по-прости регулярни изрази за всяка частвсяка част

• Пишете прегледни регулярни изрази Пишете прегледни регулярни изрази форматирани прегледно, ако трябва на форматирани прегледно, ако трябва на няколко реда няколко реда

• Пример: изваждане на всички изречения с Пример: изваждане на всички изречения с главни букви:главни букви:

1.1. Извадете изречениятаИзвадете изреченията

2.2. Проверете всяко дали е с главни буквиПроверете всяко дали е с главни букви

Page 17: BARS - Regular Expressions - Svetlin Nakov, George Penkov

Връзки по тематаВръзки по темата

• http://en.wikipedia.org/wiki/Regular_expressionhttp://en.wikipedia.org/wiki/Regular_expressionЩо е то Що е то Regular ExpressionRegular Expression според според WikipediaWikipedia

• http://www.regexlib.com/http://www.regexlib.com/Библиотека с готови регулярни изрази (понастоящем Библиотека с готови регулярни изрази (понастоящем над 1000)над 1000)

• http://regex.osherove.com/http://regex.osherove.com/The Regulator – The Regulator – безплатен инструмент за създаване и безплатен инструмент за създаване и тестване на регулярни изразитестване на регулярни изрази

• http://perl.plover.com/Regex/http://perl.plover.com/Regex/Как работи Как работи regexregex машината – с картинки и примери машината – с картинки и примери

• http://www.weitz.de/regex-coach/http://www.weitz.de/regex-coach/The Regex CoachThe Regex Coach

Page 18: BARS - Regular Expressions - Svetlin Nakov, George Penkov

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

Събудете се!Събудете се!

Въпроси?Въпроси?