Цитируя классиков — освоить регулярки могут «не только лишь все». Этот небольшой гайд поможет разобраться в регулярках и использовать их в нашей системе.
Что такое регулярка в принципе — лучше всего прочитать в вики. Здесь мы расскажем о POSIX-регулярках, используемых в нашей системе.
Итак, особенности POSIX-регулярок.
[] - любой символ из указанного диапазона.
Например:
[а-я] — любая буква русского алфавита.
[0-9] — любая цифра.
[абв0-9] — буква а, б, или в. Или любая цифра.
1) Мы хотим найти как слова содержащие «окно», так и «окна»:
Решение: окн[оа]
2) Мы хотим найти запросы, содержащие «iphone 4», «iphone 5» или «iphone 6»
Решение: iphone [4-6]
3) Мы хотим найти запросы, содержащие «iphone 5c» или «iphone 5s»
Решение: iphone 5[cs]
4) мы хотим найти запросы, содержащи «apple ipad 16gb» или «apple ipad 32gb»
Решение: apple ipad [13][26]gb
. - любой символ.
* - любое количество символа/скобки, идушего перед ней (0 или более).
^ - начало строки
$ - конец строки
\| - оператор «или»
\(...\) - группирующие скобки
1) Мы хотим найти запросы, содержащие либо «мобильный телефон», либо «сотовый телефон»
Вариант 1: мобильный телефон\|сотовый телефон
Вариант 2: \(мобильный\|сотовый\) телефон
Обратите внимание! Если мы напишем мобильный\|сотовый телефон, под данную регулярку попадут не только мобильные телефоны, но все что содержит просто слово мобильный (мобильный кондиционер, и.т.п.).
2) Мы хотим найти запросы, содержащие слово «виза», но не содержащие «провиза» или «византия».
Решение: \(^\| \)виза\( \|$\)
Здесь мы говорим — перед словом виза должен идти пробел или начало строки. После — пробел или конец строки. Обратите внимание, что мы не можем использовать квадратные скобки, т. к. внутри них операторы начала и конца строки превратятся просто в соответствующие символы.
\? - один предыдущий символ или 0 символов.
\+ один или более предыдущих символов.
\{a} a предыдущих символов.
\{a,b} от a до b предыдущих символов.
1) Мы хотим найти запросы, содержащие различные вариации б/у (бу, б.у, б-у, б у). Конечно же, все как отдельное слово (и никаких буровых).
Решение: \(^\| \)б[/.- ]\?\( \|\$\)
2) Мы хотим найти все падежи слова виза.
Решение: \(^\| \)виз\([аыуе]\|ой\|а[мх]и\?\)\?\( \|$\)
Если вы дочитали до этого места и всё поняли, то дальше сможете обойтись учебником по регуляркам :)