Регулярни изрази Светлин Наков Георги Пенков Българска асоциация на разработчиците на софтуер www.devbg.org
Съдържание <ul><li>Какво са регулярните изрази? </li></ul><ul><li>Езикът на регулярните изрази </li></ul><ul><li>Валидация...
Какво са регулярните изрази? <ul><li>Мощно средство за обработка на текст </li></ul><ul><li>Служат за: </li></ul><ul><ul><...
Още за регулярните изрази <ul><li>Интуитивен подход </li></ul><ul><ul><li>Спестяват време, усилия и код  </li></ul></ul><u...
Какво е регулярен израз? <ul><li>Регулярните изрази са специални символни низове, които: </li></ul><ul><ul><li>Дефинират ш...
Примери за рег. изрази <ul><li>Шаблон, описващ всички непразни низове, които се състоят само от цифрите  0  и  1 : </li></...
Езикът на регулярните изрази <ul><li>Състои се от  литерали  и  метасимволи </li></ul><ul><li>Литерали  – константи, които...
Валидация на числа с  .NET using System; using System.Text.RegularExpressions; public class RegExSample { static void Main...
Валидация на имена с  Perl <ul><li>Очакваме име и фамилия, на кирилица с главна начална буква ,  напр. “Ангел Борисов“ </l...
Парсване на текст с  .NET <ul><li>Даден е текст във формат: </li></ul><ul><li>Използваме регулярни изрази и групи: </li></...
Заменяне на  &  с  &amp;  с  Perl <ul><li>Искаме да заменим всички символи  &  със съответното им HTML entity:  &amp; </li...
Замяна на тагове с  .NET <ul><li>Да се заменят таговете  [URL=…] … [/URL]  с HTML хипервръзки  <a href = …> … </a> : </li>...
Тлъст, сложен, но пък пояснен regexp пример Da teeeeesttt sux 1000000  (million) timesssss ^ $ ( е+ ) ([Ds]+) . + ? (d{5,1...
Езици и платформи <ul><li>Регулярни изрази се поддържат навсякъде: </li></ul><ul><ul><li>Perl </li></ul></ul><ul><ul><li>....
Полезни съвети <ul><li>Избягвайте  сложни  регулярни изрази </li></ul><ul><li>Проверете дали някой вече не е писал регуляр...
Полезни съвети <ul><li>Разбивайте проблема на части </li></ul><ul><ul><li>Пишете по-прости регулярни изрази за всяка част ...
Връзки по темата <ul><li>http://en.wikipedia.org/wiki/Regular_expression </li></ul><ul><li>Що е то  Regular Expression  сп...
Регулярни изрази <ul><li>Събудете се! </li></ul><ul><li>Въпроси? </li></ul>
Upcoming SlideShare
Loading in …5
×

BARS - Regular Expressions - Svetlin Nakov, George Penkov

2,429 views

Published on

Published in: Technology, Design
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,429
On SlideShare
0
From Embeds
0
Number of Embeds
46
Actions
Shares
0
Downloads
34
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

BARS - Regular Expressions - Svetlin Nakov, George Penkov

  1. 1. Регулярни изрази Светлин Наков Георги Пенков Българска асоциация на разработчиците на софтуер www.devbg.org
  2. 2. Съдържание <ul><li>Какво са регулярните изрази? </li></ul><ul><li>Езикът на регулярните изрази </li></ul><ul><li>Валидация чрез регулярни изрази </li></ul><ul><li>Парсване на текст </li></ul><ul><li>Замяна в текст </li></ul><ul><li>Езици и платформи </li></ul><ul><li>Полезни съвети </li></ul><ul><li>Връзки по темата </li></ul>
  3. 3. Какво са регулярните изрази? <ul><li>Мощно средство за обработка на текст </li></ul><ul><li>Служат за: </li></ul><ul><ul><li>Извличане на информация от текст по зададен шаблон ( regexp pattern) </li></ul></ul><ul><ul><li>Валидация на текстова информация </li></ul></ul><ul><ul><li>Променяне/изтриване на поднизове в текст </li></ul></ul><ul><li>Компактен синтаксис </li></ul>
  4. 4. Още за регулярните изрази <ul><li>Интуитивен подход </li></ul><ul><ul><li>Спестяват време, усилия и код </li></ul></ul><ul><li>Ефективни </li></ul><ul><ul><li>Преобразуват се до крайни автомати ( Finite State Machine) </li></ul></ul><ul><li>Предпочитан избор при боравене с текст </li></ul><ul><li>Поддържат се от всевъзможни езици и платформи </li></ul>
  5. 5. Какво е регулярен израз? <ul><li>Регулярните изрази са специални символни низове, които: </li></ul><ul><ul><li>Дефинират шаблон определящ множество от низове (даден регулярен език) </li></ul></ul><ul><ul><li>Използват специален “regex” синтаксис за описанието на шаблоните </li></ul></ul><ul><li>Regex синтаксисът </li></ul><ul><ul><li>Еднакъв на всички платформи (с малки изключения) </li></ul></ul><ul><ul><li>Производен на Perl синтаксиса </li></ul></ul>
  6. 6. Примери за рег. изрази <ul><li>Шаблон, описващ всички непразни низове, които се състоят само от цифрите 0 и 1 : </li></ul><ul><li>Всички телефонни номера имащи формат 088XXXXXXX (където X е цифра) </li></ul><ul><li>Име на домейн в .bg зоната </li></ul>[0- 1 ] + 088 [0- 9 ]{7} ([A-Za-z 0-9 -]+.)+bg
  7. 7. Езикът на регулярните изрази <ul><li>Състои се от литерали и метасимволи </li></ul><ul><li>Литерали – константи, които задават точно определен подниз </li></ul><ul><li>Метасимволи – описват символни класове или задават специални правила в шаблона </li></ul><ul><ul><li>Класове от символи, напр. [a-zA-Z] , w , W , d , s </li></ul></ul><ul><ul><li>За количество (quantifiers), напр. * , + , {8,10} </li></ul></ul><ul><ul><li>За местоположение, напр.  , A , z , ^ , $ </li></ul></ul><ul><ul><li>За алтернативен избор – | (логическо &quot;или&quot;) </li></ul></ul><ul><ul><li>За групиране – ( , ) , напр. ([0-9]+) </li></ul></ul><ul><ul><li>Escaping последователности, напр. * , </li></ul></ul>
  8. 8. Валидация на числа с .NET using System; using System.Text.RegularExpressions; public class RegExSample { static void Main(string[] args) { string s = &quot; 1234 &quot;; string pattern = @&quot; A[1-9][0-9]*z &quot;; if (Regex.IsMatch( s , pattern)) Console.WriteLine(&quot;{0} is valid number&quot;, s ); else Console.WriteLine(&quot;Invalid number: {0}&quot;, s ); } }
  9. 9. Валидация на имена с Perl <ul><li>Очакваме име и фамилия, на кирилица с главна начална буква , напр. “Ангел Борисов“ </li></ul><ul><li>Валидация на потребителско име с дължина от 8 до 32 символа, съставено от латински букви, цифри и “_” : </li></ul>$name = &quot;Ангел Борисов&quot;; $pattern = ' ^([А-Я][а-я]+)s([А-Я][а-я]+)$ '; if ( $name =~ /$pattern/ ) { ... } if ($username !~ / ^[wd]{8,32}$ / ) { print &quot; Invalid username! &quot; ; }
  10. 10. Парсване на текст с .NET <ul><li>Даден е текст във формат: </li></ul><ul><li>Използваме регулярни изрази и групи: </li></ul><име на потребител> < IP адрес> <време в системата> String text = &quot;root 193.168.22.18 22:12:38 &quot; + &quot;nakov 217.9.231.126 00:07:24&quot;; string pattern = @&quot; (?<name>S+)s+(?<ip>[0-9.]+)s+(?<time>[0-9:]+) &quot;; MatchCollection matches = Regex.Matches(text, pattern); foreach (Match m in matches) { Console.WriteLine(&quot;name={0,-8} ip={1,-16} time={2}&quot;, m.Groups[&quot;name&quot;], m.Groups[&quot;ip&quot;], m.Groups[&quot;time&quot;]); }
  11. 11. Заменяне на & с &amp; с Perl <ul><li>Искаме да заменим всички символи & със съответното им HTML entity: &amp; </li></ul><ul><li>Задачата не е тривиална: </li></ul><ul><ul><li>Не трябва да бъдат променяни съществуващи HTML entities (напр. &quot; или &#160 ; ). </li></ul></ul># Входът идва от STDIN , а изходът е към STDOUT while (<STDIN>) { s/ &(?![a-zA-Z]{2,6};|#[0-9]{3,5};) /&amp;/g; print; }
  12. 12. Замяна на тагове с .NET <ul><li>Да се заменят таговете [URL=…] … [/URL] с HTML хипервръзки <a href = …> … </a> : </li></ul>static void Main() { String text = &quot;Here is the link with logo:<br>&quot; + &quot;[URL=http://www.devbg.org][IMG] &quot; + &quot;http://www.devbg.org/logo.gif[/IMG][/URL] &quot;; string pattern = @&quot;[URL=(?<url>[^]]+)]&quot; + @&quot;(?<content>(.|s)*?)[/URL] &quot;; string newPattern = &quot;<a href=&quot;${url}&quot;>${content}</a>&quot;; string newText = Regex.Replace(text, pattern, newPattern); Console.WriteLine(newText); }
  13. 13. Тлъст, сложен, но пък пояснен regexp пример Da teeeeesttt sux 1000000 (million) timesssss ^ $ ( е+ ) ([Ds]+) . + ? (d{5,10}s) (.*) i .*? s .* $1 $2 $3 $4 #!/usr/bin/perl $a ='Da teeeeesttt sux 1000000 (million) timesssss '; $a =~ /^.+? ( e+ )( [Ds]+ )( d{5,10}s )( .* ) i.*?s.*$/;
  14. 14. Езици и платформи <ul><li>Регулярни изрази се поддържат навсякъде: </li></ul><ul><ul><li>Perl </li></ul></ul><ul><ul><li>.NET Framework (C#, VB.NET, …) </li></ul></ul><ul><ul><li>Java </li></ul></ul><ul><ul><li>PHP </li></ul></ul><ul><ul><li>JavaScript </li></ul></ul><ul><ul><li>Delphi </li></ul></ul><ul><ul><li>C, C++ </li></ul></ul>
  15. 15. Полезни съвети <ul><li>Избягвайте сложни регулярни изрази </li></ul><ul><li>Проверете дали някой вече не е писал регулярен израз за вашия проблем </li></ul><ul><ul><li>Решението може да е по-пълно от вашето </li></ul></ul><ul><ul><li>Съществуват готови рег. изрази: </li></ul></ul><ul><ul><ul><li>Описващи URL адреси; </li></ul></ul></ul><ul><ul><ul><li>За валидация на e - mail адреси; </li></ul></ul></ul><ul><ul><ul><li>За проверка формата на IP адреси; </li></ul></ul></ul><ul><ul><ul><li>Много други </li></ul></ul></ul><ul><ul><li>Не се доверявайте – има и грешни! </li></ul></ul>
  16. 16. Полезни съвети <ul><li>Разбивайте проблема на части </li></ul><ul><ul><li>Пишете по-прости регулярни изрази за всяка част </li></ul></ul><ul><ul><li>Пишете прегледни регулярни изрази форматирани прегледно, ако трябва на няколко реда </li></ul></ul><ul><ul><li>Пример: изваждане на всички изречения с главни букви: </li></ul></ul><ul><ul><ul><ul><li>Извадете изреченията </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Проверете всяко дали е с главни букви </li></ul></ul></ul></ul>
  17. 17. Връзки по темата <ul><li>http://en.wikipedia.org/wiki/Regular_expression </li></ul><ul><li>Що е то Regular Expression според Wikipedia </li></ul><ul><li>http://www.regexlib.com/ </li></ul><ul><li>Библиотека с готови регулярни изрази (понастоящем над 1000) </li></ul><ul><li>http://regex.osherove.com/ </li></ul><ul><li>The Regulator – безплатен инструмент за създаване и тестване на регулярни изрази </li></ul><ul><li>http://perl.plover.com/Regex/ </li></ul><ul><li>Как работи regex машината – с картинки и примери </li></ul><ul><li>http://www.weitz.de/regex-coach/ </li></ul><ul><li>The Regex Coach </li></ul>
  18. 18. Регулярни изрази <ul><li>Събудете се! </li></ul><ul><li>Въпроси? </li></ul>

×