Работать с регулярными выражениями ― непростое занятие. Попадается задача с регулярками, вроде всё выучил, понял. Через неделю смотрю и думаю, как я это написал и что это значит. Знакомо?
Регулярки ― очень мощный инструмент, но очень ресурсоёмкий: сложно запомнить все конструкции, а если и запомнил ― всё равно приходится себя проверять. Вот бы иметь возможность строить регулярки так же, как Doctrine строит sql-запросы через свой билдер.
Хорошая новость: такая библиотека есть ― https://github.com/bassim/super-expressive-php
Пример из github:
Допустим, мы хотим отловить в строке шестнадцатеричный код
0xC0D3. Если бы нам пришлось составлять регулярное выражение, то вышло бы что-то похожее: /^(?:0x)?([A-Fa-f0-9]{4})$/. С библиотекой это можно сделать так:SuperExpressive::create()Что на выходе даст тоже самое регулярное выражение. Здорово! Подтяну в свои рабочие проекты, посмотрим, как оно покажет себя на практике :)
->startOfInput()
->optional()->string('0x')
->capture()
->exactly(4)->anyOf()
->range('A', 'F')
->range('a', 'f')
->range('0', '9')
->end()
->end()
->endOfInput()
->toRegexString();