SlideShare a Scribd company logo
1 of 93
Download to read offline
Регулярные выражения

Макс Ширшин
Руководитель группы разработки интерфейсов
Рекламной Сети Яндекса

Школа Разработки Интерфейсов Яндекса
Симферополь, 2013
Вместо предисловия




2
Виды регулярных выражений
• POSIX (BRE, ERE)

• PCRE = Perl-Compatible Regular Expressions
Цитата из стандарта языка JavaScript:

«Вид и функциональность регулярных
выражений в JavaScript реализованы
по подобию подсистемы регулярных
выражений в языке программирования Perl 5»

3
JS-синтаксис (очень кратко)

    var re = /^foo/;




4
JS-синтаксис (очень кратко)

    var re = /^foo/;

    // boolean
    re.test('строка');




5
JS-синтаксис (очень кратко)

    var re = /^foo/;

    // boolean
    re.test('строка');

    // null или Array
    re.exec('строка');


6
Из чего состоят регэкспы




7
Из чего состоят регэкспы
1. Символы




8
Из чего состоят регэкспы
1. Символы




2. Операции




9
Из чего состоят регэкспы
1. Символы
— обычные


2. Операции




10
Из чего состоят регэкспы
1. Символы
— обычные
— специальные (метасимволы)

2. Операции




11
Из чего состоят регэкспы
1. Символы
— обычные
— специальные (метасимволы)

2. Операции
— квантификация




12
Из чего состоят регэкспы
1. Символы
— обычные
— специальные (метасимволы)

2. Операции
— квантификация
— перечисление


13
Из чего состоят регэкспы
1. Символы
— обычные
— специальные (метасимволы)

2. Операции
— квантификация
— перечисление
— группировка

14
Метасимволы




8
Любой символ
 /./.test('foo');   // true

 /./.test('rn')   // false




16
Любой символ
 /./.test('foo');    // true

 /./.test('rn')    // false



 Что вы хотели на самом деле:
 /[sS]/ для JS
   или
 /./s (не работает в JS)

17
Границы строк
 >>> /^something$/.test('something')
 true




18
Границы строк
 >>> /^something$/.test('something')
 true

 >>> /^something$/.test('somethingnbad')
 false




19
Границы строк
 >>> /^something$/.test('something')
 true

 >>> /^something$/.test('somethingnbad')
 false

 >>> /^something$/m.test('somethingnbad')
 true




20
Граница слова
 >>> /ba/.test('alabama)
 true




21
Граница слова
 >>> /ba/.test('alabama)
 true
 >>> /ab/.test('alabama')
 true




22
Граница слова
 >>> /ba/.test('alabama)
 true
 >>> /ab/.test('alabama')
 true

 >>> /ab/.test('naïve')
 true




23
Граница слова
 >>> /ba/.test('alabama)
 true
 >>> /ab/.test('alabama')
 true

 >>> /ab/.test('naïve')
 true

 не-граница слова
 /Ba/.test('alabama');
24
Символьные классы




12
Пробельные символы
 /s/ (инвертированный вариант /S/)




26
Пробельные символы
 /s/ (инвертированный вариант /S/)

 FF:
 t     n       v       f     r     u0020 u00a0
 u1680 u180e   u2000   u2001 u2002 u2003 u2004
 u2005 u2006   u2007   u2008 u2009 u200a u2028
 u2029 u202f   u205f   u3000

 Chrome 19, IE 9:
 как в FF 12 и ещё ufeff

 IE 7, 8 :-(
 только:
 t n v f r u0020

27
Буквы и цифры
 /d/ ~ цифры от 0 до 9

 /w/ ~ буквы, цифры и подчёркивание
 В JS не работает для русских букв!

 И наоборот:
 /D/ ~ всё, кроме цифр
 /W/ ~ всё, кроме букв и цифр




28
Произвольные классы символов
 Пример:
 /[abc123]/




29
Произвольные классы символов
 Пример:
 /[abc123]/

 Работают метасимволы и диапазоны:
 /[A-Fd]/




30
Произвольные классы символов
 Пример:
 /[abc123]/

 Работают метасимволы и диапазоны:
 /[A-Fd]/

 Можно указать несколько диапазонов:
 /[a-cG-M0-7]/




31
Произвольные классы символов
 Пример:
 /[abc123]/

 Работают метасимволы и диапазоны:
 /[A-Fd]/

 Можно указать несколько диапазонов:
 /[a-cG-M0-7]/

 ВАЖНО: диапазоны берутся из Юникода.
 При работе с кириллическими диапазонами
 проверьте порядок символов в Юникоде!
32
Произвольные классы символов

 символ «точка» — просто точка!
 /[.]/.test('anything') // false




33
Произвольные классы символов

 символ «точка» — просто точка!
 /[.]/.test('anything') // false

 символы:  ] -
 /[]-]/




34
Инвертированные
символьные классы
 всё, кроме a, b, c:
 /[^abc]/

 ^ как символ:
 /[abc^]/




35
Квантификаторы




18
Ноль или более, один или
более

 /bo*/.test('b') // true




37
Ноль или более, один или
более

 /bo*/.test('b') // true

 /.*/.test('')   // true




38
Ноль или более, один или
более

 /bo*/.test('b') // true

 /.*/.test('')   // true

 /bo+/.test('b') // false



39
Ноль или один


 /colou?r/.test('color');
 /colou?r/.test('colour');




40
Диапазоны повторов
 /bo{7}/   точно 7




41
Диапазоны повторов
 /bo{7}/     точно 7

 /bo{2,5}/   от 2 до 5, x < y




42
Диапазоны повторов
 /bo{7}/     точно 7

 /bo{2,5}/   от 2 до 5, x < y

 /bo{5,}/    5 или более




43
Диапазоны повторов
 /bo{7}/     точно 7

 /bo{2,5}/   от 2 до 5, x < y

 /bo{5,}/    5 или более

 в JS не работает!
 /b{,5}/.test('bbbbb')

44
Жадные (greedy)
квантификаторы
 var r = /a+/.exec('aaaaa');




45
Жадные (greedy)
квантификаторы
 var r = /a+/.exec('aaaaa');

 >>> r[0]




46
Жадные (greedy)
квантификаторы
 var r = /a+/.exec('aaaaa');

 >>> r[0]
 "aaaaa"



47
Ленивые (lazy) квантификаторы

 var r = /a+?/.exec('aaaaa');




48
Ленивые (lazy) квантификаторы

 var r = /a+?/.exec('aaaaa');
 >>> r[0]




49
Ленивые (lazy) квантификаторы

 var r = /a+?/.exec('aaaaa');
 >>> r[0]
 "a"




50
Ленивые (lazy) квантификаторы

 var r = /a+?/.exec('aaaaa');
 >>> r[0]
 "a"

 r = /a*?/.exec('aaaaa');



51
Ленивые (lazy) квантификаторы

 var r = /a+?/.exec('aaaaa');
 >>> r[0]
 "a"

 r = /a*?/.exec('aaaaa');
 >>> r[0]


52
Ленивые (lazy) квантификаторы

 var r = /a+?/.exec('aaaaa');
 >>> r[0]
 "a"

 r = /a*?/.exec('aaaaa');
 >>> r[0]
 ""

53
Группировки




24
Группировки

 с захватом
 /(boo)/.test("boo");




55
Группировки

 с захватом
 /(boo)/.test("boo");

 без захвата
 /(?:boo)/.test("boo");



56
Группировки и конструктор RegExp
var result = /(bo)o+(b)/.exec('the booooob');




 57
Группировки и конструктор RegExp
var result = /(bo)o+(b)/.exec('the booooob');
>>> RegExp.$1
"bo"




 58
Группировки и конструктор RegExp
var result = /(bo)o+(b)/.exec('the booooob');
>>> RegExp.$1
"bo"
>>> RegExp.$2
"b"




 59
Группировки и конструктор RegExp
var result = /(bo)o+(b)/.exec('the booooob');
>>> RegExp.$1
"bo"
>>> RegExp.$2
"b"
>>> RegExp.$9
""




 60
Группировки и конструктор RegExp
var result = /(bo)o+(b)/.exec('the booooob');
>>> RegExp.$1
"bo"
>>> RegExp.$2
"b"
>>> RegExp.$9
""
>>> RegExp.$10
undefined



 61
Группировки и конструктор RegExp
var result = /(bo)o+(b)/.exec('the booooob');
>>> RegExp.$1
"bo"
>>> RegExp.$2
"b"
>>> RegExp.$9
""
>>> RegExp.$10
undefined
>>> RegExp.$0
undefined

 62
Порядок нумерации группировок
      /((foo) (b(a)r))/




 63
Порядок нумерации группировок
      /((foo) (b(a)r))/

$1 (                 )    foo bar




 64
Порядок нумерации группировок
      /((foo) (b(a)r))/

$1 (                 )    foo bar
$2 (       )              foo



 65
Порядок нумерации группировок
      /((foo) (b(a)r))/

$1 (                 )    foo bar
$2 (       )              foo
$3             (    )     bar


 66
Порядок нумерации группировок
      /((foo) (b(a)r))/

$1 (                     )   foo bar
$2 (       )                 foo
$3             (         )   bar
$4                 ( )       a

 67
Lookahead
 var r = /best(?= match)/.exec('best match');




68
Lookahead
 var r = /best(?= match)/.exec('best match');

 >>> !!r
 true




69
Lookahead
 var r = /best(?= match)/.exec('best match');

 >>> !!r
 true

 >>> r[0]
 "best"




70
Lookahead
 var r = /best(?= match)/.exec('best match');

 >>> !!r
 true

 >>> r[0]
 "best"

 >>> /best(?! match)/.test('best match')
 false




71
Перечисление




30
Логическое «или»

 /red|green|blue light/
 /(red|green|blue) light/

 >>> /var a(;|$)/.test('var a')
 true




73
Backreferences
(обратные ссылки)
 true
 /(red|green) apple is 1/.test('red apple is red')

 true
 /(red|green) apple is 1/.test('green apple is green')




74
Представление символов




32
Представление символов
 x09 === t (не Unicode, для ASCII/ANSI)
 u20AC === € (для Unicode)




76
Представление символов
 x09 === t (не Unicode, для ASCII/ANSI)
 u20AC === € (для Unicode)

 обратный slash убирает специальное
 значение у символа
 /()/.test('()') // true
 /n/.test('n') // true




77
Представление символов
 x09 === t (не Unicode, для ASCII/ANSI)
 u20AC === € (для Unicode)

 обратный slash убирает специальное
 значение у символа
 /()/.test('()') // true
 /n/.test('n') // true

 иногда верно и обратное
 /f/.test('f') // false!


78
Флаги




34
Флаги в регулярных выражениях
 g i m s x




80
Флаги в регулярных выражениях
 g i m s x

 global match




81
Флаги в регулярных выражениях
 g i m s x

 global match
 ignore case




82
Флаги в регулярных выражениях
 g i m s x

 global match
 ignore case
 multiline matching for ^ and $




83
Флаги в регулярных выражениях
 g i m s x

 global match
 ignore case
 multiline matching for ^ and $

 нет поддержки в JS для:
 string as single line
 extend pattern



84
Альтернативный синтаксис
для флагов
 /(?i)foo/
 /(?i-m)bar$/
 /(?i-sm).x$/
 /(?i)foo(?-i)bar/

 Не все реализации поддерживают
 переключение флагов внутри regexp.

 JS при таком синтаксисе включает флаги на
 весь regexp сразу и не даёт менять.
85
RegExp в JavaScript




86
Методы
 экземпляры RegExp:
   /regexp/.exec('строка')
       null или массив ['всё совпадение', $1, $2, ...]
   /regexp/.test('строка')
       false или true

 экземпляры String:
   'str'.match(/regexp/)
   'str'.match('w{1,3}')
       - эквивалент /regexp/.exec, если нет флага g;
       - массив всех совпадений по строке, если есть флаг g
 (внутренние группировки игнорируются)

     'str'.search(/regexp/)
     'str'.search('w{1,3}')
         позиция первого совпадения или -1



87
Методы
 экземпляры String:
 'str'.replace(/old/, 'new');

 В строке   замены поддерживаются следующие спецсимволы:
     $$     вставляет значок доллара "$"
     $&     подстрока, совпавшая с регэкспом
     $`     подстрока до $&
     $'     подстрока после $&

     $1, $2, $3 и т.д.: cтрока, совпавшая с соответствующей
 скобочной группировкой

 'str'.replace(/(r)(e)gexp/g,
     function(matched, $1, $2, offset, sourceString) {
         // чем заменить matched на этом шаге?
         return 'замена';
 });



88
RegExp injection
 // ПЛОХО
 var re = new RegExp('^' + userInput + '$');
 var userInput = '[abc]';



 // ХОРОШО
 RegExp.escape = function(text) {
   return text.replace(/[-[]{}()*+?.,^$|#s]/g, "$&");
 };

 var re = new RegExp('^' + RegExp.escape(userInput) + '$');




89
Что почитать




90
В интернете:
javascript.ru/basic/regular-expression

Книга:
              Mastering Regular Expressions
              O'Reilly Media




91
Вопросы?




92
Макс Ширшин
Руководитель группы
разработки интерфейсов
Рекламной Сети Яндекса

ingdir@yandex-team.ru

@ingdir

More Related Content

What's hot

Юнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, GoogleЮнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, Googleyaevents
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
 
Пояснения к статье про Copy-Paste
Пояснения к статье про Copy-PasteПояснения к статье про Copy-Paste
Пояснения к статье про Copy-PasteTatyanazaxarova
 
Аскетичная разработка браузера
Аскетичная разработка браузераАскетичная разработка браузера
Аскетичная разработка браузераPlatonov Sergey
 
Warp9: reactive primitives
Warp9: reactive primitivesWarp9: reactive primitives
Warp9: reactive primitivesrystsov
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование LinuxAnthony Shoumikhin
 
DI в C++ тонкости и нюансы
DI в C++ тонкости и нюансыDI в C++ тонкости и нюансы
DI в C++ тонкости и нюансыPlatonov Sergey
 
основы Java переменные, циклы
основы Java   переменные, циклыосновы Java   переменные, циклы
основы Java переменные, циклыSergey Nemchinsky
 
Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияYandex
 
хитрости выведения типов
хитрости выведения типовхитрости выведения типов
хитрости выведения типовcorehard_by
 
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовЮлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовMskDotNet Community
 
Блоки, лямбды, замыкания
Блоки, лямбды, замыканияБлоки, лямбды, замыкания
Блоки, лямбды, замыканияDmitriy Kiriyenko
 
Михаил Давыдов — Code Style
Михаил Давыдов — Code StyleМихаил Давыдов — Code Style
Михаил Давыдов — Code StyleYandex
 
Михаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знанияМихаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знанияYandex
 
По колено в Си++ г... коде
По колено в Си++ г... кодеПо колено в Си++ г... коде
По колено в Си++ г... кодеTatyanazaxarova
 

What's hot (16)

Юнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, GoogleЮнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, Google
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
Пояснения к статье про Copy-Paste
Пояснения к статье про Copy-PasteПояснения к статье про Copy-Paste
Пояснения к статье про Copy-Paste
 
Аскетичная разработка браузера
Аскетичная разработка браузераАскетичная разработка браузера
Аскетичная разработка браузера
 
Warp9: reactive primitives
Warp9: reactive primitivesWarp9: reactive primitives
Warp9: reactive primitives
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование Linux
 
DI в C++ тонкости и нюансы
DI в C++ тонкости и нюансыDI в C++ тонкости и нюансы
DI в C++ тонкости и нюансы
 
основы Java переменные, циклы
основы Java   переменные, циклыосновы Java   переменные, циклы
основы Java переменные, циклы
 
Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знания
 
хитрости выведения типов
хитрости выведения типовхитрости выведения типов
хитрости выведения типов
 
Programming c++ (begin-if-else)
Programming c++ (begin-if-else)Programming c++ (begin-if-else)
Programming c++ (begin-if-else)
 
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовЮлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
 
Блоки, лямбды, замыкания
Блоки, лямбды, замыканияБлоки, лямбды, замыкания
Блоки, лямбды, замыкания
 
Михаил Давыдов — Code Style
Михаил Давыдов — Code StyleМихаил Давыдов — Code Style
Михаил Давыдов — Code Style
 
Михаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знанияМихаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знания
 
По колено в Си++ г... коде
По колено в Си++ г... кодеПо колено в Си++ г... коде
По колено в Си++ г... коде
 

Viewers also liked

Robotics and collision detection
Robotics and   collision detectionRobotics and   collision detection
Robotics and collision detectionNaveen Sihag
 
Facebook advertising tip voor ondernemers ikv Het gat in de markt
Facebook advertising tip voor ondernemers ikv Het gat in de marktFacebook advertising tip voor ondernemers ikv Het gat in de markt
Facebook advertising tip voor ondernemers ikv Het gat in de marktHatti Knuts
 
MOTODEV Developer Newsletter
MOTODEV Developer NewsletterMOTODEV Developer Newsletter
MOTODEV Developer NewsletterKamini Patel
 
Project 02
Project 02Project 02
Project 02chorthip
 
Martin Bardsley: Quality In Austerity-Indicators of Quality
Martin Bardsley: Quality In Austerity-Indicators of QualityMartin Bardsley: Quality In Austerity-Indicators of Quality
Martin Bardsley: Quality In Austerity-Indicators of QualityNuffield Trust
 
Creare mantenere paginafacebook
Creare mantenere paginafacebookCreare mantenere paginafacebook
Creare mantenere paginafacebookGianluigi Spagnoli
 
Marko Mrsnik: Finance and health: Worldwide trends. Rising cost of health car...
Marko Mrsnik: Finance and health: Worldwide trends. Rising cost of health car...Marko Mrsnik: Finance and health: Worldwide trends. Rising cost of health car...
Marko Mrsnik: Finance and health: Worldwide trends. Rising cost of health car...Nuffield Trust
 
Apoc slideshare
Apoc slideshareApoc slideshare
Apoc slideshareAPOC
 

Viewers also liked (16)

Bluetooth 1
Bluetooth 1Bluetooth 1
Bluetooth 1
 
Renewable energy
Renewable energyRenewable energy
Renewable energy
 
Presentation_NEW.PPTX
Presentation_NEW.PPTXPresentation_NEW.PPTX
Presentation_NEW.PPTX
 
Retirement Plan Investment Fee Disclosure
Retirement Plan Investment Fee Disclosure Retirement Plan Investment Fee Disclosure
Retirement Plan Investment Fee Disclosure
 
Robotics and collision detection
Robotics and   collision detectionRobotics and   collision detection
Robotics and collision detection
 
Facebook advertising tip voor ondernemers ikv Het gat in de markt
Facebook advertising tip voor ondernemers ikv Het gat in de marktFacebook advertising tip voor ondernemers ikv Het gat in de markt
Facebook advertising tip voor ondernemers ikv Het gat in de markt
 
MOTODEV Developer Newsletter
MOTODEV Developer NewsletterMOTODEV Developer Newsletter
MOTODEV Developer Newsletter
 
Red tacton
Red tactonRed tacton
Red tacton
 
Info on india
Info on indiaInfo on india
Info on india
 
Project 02
Project 02Project 02
Project 02
 
Martin Bardsley: Quality In Austerity-Indicators of Quality
Martin Bardsley: Quality In Austerity-Indicators of QualityMartin Bardsley: Quality In Austerity-Indicators of Quality
Martin Bardsley: Quality In Austerity-Indicators of Quality
 
Creare mantenere paginafacebook
Creare mantenere paginafacebookCreare mantenere paginafacebook
Creare mantenere paginafacebook
 
Marko Mrsnik: Finance and health: Worldwide trends. Rising cost of health car...
Marko Mrsnik: Finance and health: Worldwide trends. Rising cost of health car...Marko Mrsnik: Finance and health: Worldwide trends. Rising cost of health car...
Marko Mrsnik: Finance and health: Worldwide trends. Rising cost of health car...
 
Apoc slideshare
Apoc slideshareApoc slideshare
Apoc slideshare
 
3 d tv
3 d tv3 d tv
3 d tv
 
Crack mcts.com
Crack mcts.comCrack mcts.com
Crack mcts.com
 

Similar to Макс Ширшин — Регулярные выражения

Present saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasovPresent saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasovPavel Vlasov
 
Индексный поиск по регулярным выражениям (Александр Коротков)
Индексный поиск по регулярным выражениям (Александр Коротков)Индексный поиск по регулярным выражениям (Александр Коротков)
Индексный поиск по регулярным выражениям (Александр Коротков)Ontico
 
PHP basic
PHP basicPHP basic
PHP basicNoveo
 
Михаил Трошев — CSS: Систематизация базовых знаний
Михаил Трошев — CSS: Систематизация базовых знанийМихаил Трошев — CSS: Систематизация базовых знаний
Михаил Трошев — CSS: Систематизация базовых знанийYandex
 
PHP Tricks
PHP TricksPHP Tricks
PHP TricksBlackFan
 
Дополнительные возможности Javascript
Дополнительные возможности JavascriptДополнительные возможности Javascript
Дополнительные возможности JavascriptDenis Latushkin
 
Статический анализ кода: современный взгляд
Статический анализ кода: современный взглядСтатический анализ кода: современный взгляд
Статический анализ кода: современный взглядAndrey Karpov
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveSQALab
 
JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...
JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...
JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...GeeksLab Odessa
 
Rabota so strokami_v_php
Rabota so strokami_v_phpRabota so strokami_v_php
Rabota so strokami_v_phpVasya Petrov
 
Михаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajaxМихаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajaxYandex
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиSQALab
 
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo
 
Groovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conferenceGroovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conferencevoituk
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиZestranec
 
Как за час сделать недельную работу
Как за час сделать недельную работуКак за час сделать недельную работу
Как за час сделать недельную работуcorehard_by
 
Парсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricksПарсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricksRoman Dvornov
 
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)Ontico
 

Similar to Макс Ширшин — Регулярные выражения (20)

Present saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasovPresent saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasov
 
Индексный поиск по регулярным выражениям (Александр Коротков)
Индексный поиск по регулярным выражениям (Александр Коротков)Индексный поиск по регулярным выражениям (Александр Коротков)
Индексный поиск по регулярным выражениям (Александр Коротков)
 
PHP basic
PHP basicPHP basic
PHP basic
 
Михаил Трошев — CSS: Систематизация базовых знаний
Михаил Трошев — CSS: Систематизация базовых знанийМихаил Трошев — CSS: Систематизация базовых знаний
Михаил Трошев — CSS: Систематизация базовых знаний
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
Дополнительные возможности Javascript
Дополнительные возможности JavascriptДополнительные возможности Javascript
Дополнительные возможности Javascript
 
Статический анализ кода: современный взгляд
Статический анализ кода: современный взглядСтатический анализ кода: современный взгляд
Статический анализ кода: современный взгляд
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehave
 
JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...
JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...
JS Lab2017_Евгений Сафронов_Тестирование Javascript кода. Инструменты, практи...
 
Rabota so strokami_v_php
Rabota so strokami_v_phpRabota so strokami_v_php
Rabota so strokami_v_php
 
Михаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajaxМихаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajax
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
 
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
 
Groovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conferenceGroovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conference
 
лек3 4
лек3 4лек3 4
лек3 4
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
 
Как за час сделать недельную работу
Как за час сделать недельную работуКак за час сделать недельную работу
Как за час сделать недельную работу
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
 
Парсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricksПарсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricks
 
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
 

More from Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаYandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 

More from Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

Макс Ширшин — Регулярные выражения