Мой первый Pet-проект — Regexoop

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Мой первый Pet-проект - Regexoop

Ссылка на проект Regexoop

Немного о себе. Я всегда был противником бесплатного труда, меня так воспитали. Работая только за деньги и только с чужими проектами я погорел. Это ужасное чувство тошноты. Я пробовал делать проекты для себя, но ни с кем не делился. Мне казалось, мою идею украдут, хотя идеи были на уровне игр про караваны. Я пытался делить шкуру неубитого медведя со своим эго. Оно побеждало.

Спустя некоторое время я увидел интересный метод "12 проектов за 12 месяцев". Суть метода состоит в том, что ты каждый месяц делаешь 1 продукт и показываешь его людям. Неважно насколько он готов. Ты можешь эти продукты выпускать как хочешь, хочешь за деньги, хочешь бесплатно. Я выбрал путь для этого проекта - бесплатно.

Суть проекта

Regexoop - переосмысление подхода написания regex. 30 сентября я подумал - "Хм, regex такой сложный. НУ ПОЧЕМУ? Может его можно сделать как-то проще?". Начав ровно 1 октября, я 3 дня писал документацию. Этот объем документации написанной за 3 дня, я разрабатываю уже 3 недели и не дошёл даже до половины. Чего уже говорить о настоящей мощи regex.

Концепт кода:

var rules = new { 
    pattern = "{second_level}{first_level}",
    start = "end",
    first_level = new {
        pattern = "[a-z]",
        minLength = 2,
        maxLength = 3,
    },
    second_level = new {
        pattern = "[a-zA-Z0-9-].", //а вот тут ошибка, но это ведь набросок
        minLength = 2,
        maxLength = 63,
        maxRepeat = 5,
        minRepeat = 0,
        symbolsRules = new {
            "-" = new { repeat: 0 }
        }
    }
};

var er = new Regexoop(rules).Input("https://docs.microsoft.com").Find()
Console.WriteLine(er); //docs.microsoft.com

Настоящий шаблон regex представляет собой мешанину из текста с параметрами и то, что показано в концепте в настоящем regex выглядит примерно так:

^(?!-)[A-Za-z0-9-]+([\\-\\.]{1}[a-z0-9]+)*\\.[A-Za-z]{2,6}$"

Это ещё простой шаблон валидации доменов. Бывают сложнее.

Техническая реализация

Несмотря на долгий опыт в PHP, я выбрал C# как основной язык для этого проекта. В текущем состоянии .net на голову выше экосистемы PHP. Ты просто садишься, открываешь Visual Studio 2019 и всё как по масти работает. Банальный отлов ошибок при компиляции вырезает 90% глупых ошибок.

Библиотека работает на C# под .net 5.

Cценарий работы c библиотекой

  1. Создаёте новый объект правил BasicRule и заполняете публичные свойства правила. Правила можно складывать в друг-друга как матрёшку, но дочерние правила перестают быть самостоятельными и свой результат отдают родительскому правилу;

  2. Создаёте объект Regexoop и помещаете в конструктор свои правила;

  3. Вызываете метод Input() для помещения исходного текста для поиска;

  4. Вызываете один из трех режимов работы методов для поиска текста.

Rule test = new BasicRule()
{
    Name = "root",
    Pattern = "Hello",
    Start = Rule.Direction.start
};
List res = new Regexoop.Regexoop(test).Input("Hello World").Find();
//res: Hello

Да, тут я тоже ловлю некоторый фейспалм из-за "new Regexoop.Regexoop", но в скором времени хочу это исправить. Однако же работает.

Источник: https://habr.com/ru/post/587296/


Интересные статьи

Интересные статьи

Кандалакша – весьма древнее поселение, впервые место упоминается в 1517 году. В начале XX веке здесь собирали приезжавшие из США и Великобритании поезда, здесь появилось ...
Этот дом несколько принтеров напечатали из местной почвы за 200 часов. В итоге никаких отходов и необходимости доставки строительных материалов. Читать дальше → ...
Смотришь на мобильники середины нулевых в кино и не понимаешь — это вообще сотовый телефон или просто радиотрубка, беспроводной удлинитель телефона домашнего? Чем дальше забираешься в про...
В этой статье мы расскажем, как оптимизировать крупный проект в «Битрикс24» и увеличить его производительность в 3 раза, изменяя настройки MySQL и режим питания CPU. Дано Корпоративн...
Многие компании в определенный момент приходят к тому, что ряд процессов в бизнесе нужно автоматизировать, чтобы не потерять свое место под солнцем и своих заказчиков. Поэтому все...