Гайд по регуляркам.

Цитируя классиков — освоить регулярки могут «не только лишь все». Этот небольшой гайд поможет разобраться в регулярках и использовать их в нашей системе.

Что такое регулярка в принципе — лучше всего прочитать в вики. Здесь мы расскажем о 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) Мы хотим найти запросы, заканчивающиеся словом «отзывы»
Решение: отзывы$

3) Мы хотим найти запросы, начинающиеся со слова «купить» и заканчивающиеся «в москве»:
Решение: ^купить.*в москве$

\| - оператор «или»
\(...\) - группирующие скобки

Примеры:

1) Мы хотим найти запросы, содержащие либо «мобильный телефон», либо «сотовый телефон»
Вариант 1: мобильный телефон\|сотовый телефон
Вариант 2: \(мобильный\|сотовый\) телефон

Обратите внимание! Если мы напишем мобильный\|сотовый телефон, под данную регулярку попадут не только мобильные телефоны, но все что содержит просто слово мобильный (мобильный кондиционер, и.т.п.).

2) Мы хотим найти запросы, содержащие слово «виза», но не содержащие «провиза» или «византия».
Решение: \(^\| \)виза\( \|$\)

Здесь мы говорим — перед словом виза должен идти пробел или начало строки. После — пробел или конец строки. Обратите внимание, что мы не можем использовать квадратные скобки, т. к. внутри них операторы начала и конца строки превратятся просто в соответствующие символы.

\? - один предыдущий символ или 0 символов.
\+ один или более предыдущих символов.
\{a} a предыдущих символов.
\{a,b} от a до b предыдущих символов.

Примеры:

1) Мы хотим найти запросы, содержащие различные вариации б/у (бу, б.у, б-у, б у). Конечно же, все как отдельное слово (и никаких буровых).
Решение: \(^\| \)б[/.- ]\?\( \|\$\)

2) Мы хотим найти все падежи слова виза.
Решение: \(^\| \)виз\([аыуе]\|ой\|а[мх]и\?\)\?\( \|$\)

Если вы дочитали до этого места и всё поняли, то дальше сможете обойтись учебником по регуляркам :)

Наверх