Pull to refresh

SRL — Simple Regex Language

Reading time 2 min
Views 13K
Классический сухой регекс:

/^(?:[0-9]|[a-z]|[\._%\+-])+(?:@)(?:[0-9]|[a-z]|[\.-])+(?:\.)[a-z]{2,}$/i

С новым вкусом SLR:



На пост заметка не тянет, но на новость вполне. Дабы не тянуть кота за хвост, я вынес суть выше хабраката. Теперь потяну. В духе Хабра-Твиттера, прошу любить и жаловать: simple-regex.com — создание регулярок простым языком.

Для начала, это не я придумал, к сожалению. Сайт на английском, статьи как таковой нет, поэтому я не могу представить вам перевод. Сегодня я заглянул в привычный PHP подреддит, и увидел там тему «I've built a SQL-like language that compiles to regular expressions — What do you think?», по-русски «Я создал SQL-подобный язык, который компилируется в регулярные выражения». Вот так, ни больше ни меньше. Как написано в одном комментарии «Поздравляю! Ты только что сделал одно из моих самых мистических умений устаревшим!» Поэтому спешу поделиться с Хабра-сообществом, дабы все были в курсе.

Да, это близкий к естественному языку способ создания регулярок. На сайте можно найти несколько примеров. Тот, что я привёл вверху — проверяет почтовые адреса.

А вот этот:

begin with capture (letter once or more) as "protocol",
literally "://",
capture (
    letter once or more,
    any of (letter, literally ".") once or more,
    letter at least 2 times
) as "domain",
(literally ":", capture (digit once or more) as "port") optional,
capture (literally "/", anything never or more) as "path" until (any of (literally "?", must end)),
literally "?" optional,
capture (anything never or more) as "parameters" optional,
must end,
case insensitive

Служит для проверки URL, и компилируется в такую регулярочку, что Хабр даже не позволяет её правильно отобразить, поэтому я не могу её вставить, простите. Но в разделе примеров ещё много примеров. И на сайте они цветные, там читать удобнее, так что посетите, не пожалеете.



Чего на сайте я не нашёл, но что очень просится, так это реализация цепочки вызовов для задания условий. Но это есть в репозитории!

$query = SRL::startsWith()
    ->anyOf(function (Builder $query) {
        $query->digit()
            ->letter()
            ->oneOf('._%+-');
    })->onceOrMore()
    ->literally('@')
    ->anyOf(function (Builder $query) {
        $query->digit()
            ->letter()
            ->oneOf('.-');
    })->onceOrMore()
    ->literally('.')
    ->letter()->atLeast(2)
    ->mustEnd()->caseInsensitive();

Насколько это полезно покажет время. Но для начинающих программировать это явно очень упрощает тему знакомства с регулярками.

Я честно говоря, не знаю, кто автор этой штуки, но она выглядит весьма интересно. Тема на реддите размещена юзером AndroTux. Вот ссылка на репозиторий на ГитХабе. Тут можно видеть, что единственный контрибутор проекта — Karim Geiger, который разместил этот проект в репозитории компании tyvr.net, которая указана у него же в профиле. Видимо, это его же студия программистов, которые программируют за деньги. Желаю им удачи!
Tags:
Hubs:
+33
Comments 73
Comments Comments 73

Articles