Страницы

Поиск по вопросам

пятница, 5 апреля 2019 г.

Регулярные выражения в nginx

При гуглении регулярных выражений мне попадаются только огромные статьи и толстые книги. А мне надо только понять как работает это:
location ~* ^.+\.\w+$ { root /home/box/web/public; }
Окей. Начал читать книгу, закончил три главы уже, а полного понимая того, что написано выше все еще нет и, судя по всему, если идти таким путем, то не скоро будет.
Не могли бы вы просто в двух словах объяснить символику этого примера.


Ответ

^ - означает, что соответствие будет искаться с начала строки, а не с любого символа. Выражение /box/ будет соответствовать и box-web и home-box-web, а /^box/ только первой строке.
$ - означает привязку к концу строки /index\.php/ будет соответствовать и site.ru/index.php и site.ru/index.php?v=3, выражение /index\.php$/ будет соответствовать только первому варианту.
.+ - любое количество символов. Точка - любой символ, комбинация .+ - один или больше любых символов.
\. - Так как точка специальный символ, то для того, чтобы обозначить точку, ее нужно экранировать слешем.
\w - любой символ, который может составить слово \w+ - любое количество таких символов (один или больше).
Т.е. выражение ^.+\.\w+$ охватывает почти любой URL. Прицел изначально был на выражения вида hello/index.php.
Регулярные выражения - специальный декларативный язык. Выучить его не так просто, как может показаться на первый взгляд. Его декларативная природа не позволяет использовать опыт и знания, приобретенные скажем в императивных языках программирования. Поэтому изучая его следует запастись терпением - это может занять время. Квантификаторы и спец.символы придется выучить наизусть и добиться полного понимания их работы, как операторов ветвления и циклов в императивных языках. В замен вы получаете очень компактный инструмент для манипуляции строк.

Комментариев нет:

Отправить комментарий