Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232

Своя реализация регулярных выражений. Реалити разработка, как говорится учитесь пока я жив :)

16.06.2024, 15:01. Показов 4029. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Итак, для разработки своих будущих проектов мне нужен быстрый парсинг с удобным для меня функционалом. Есть же регулярные выражения скажете вы, да есть, но тоже самое можно сделать намного проще и удобнее и это я вам докажу в этой теме. Кроме того при использовании регулярных выражений из стандартной библиотеки подключаются куча всего разного, что увеличивает исходный код ну и скорость я думаю от этого тоже замедляется. Короче споры тут не уместны я приступаю к разработке своей реализации регулярных выражения на Rust.

На разработку может уйти некоторое время, т.к. я только начинаю писать на Rust, приходится попутно всё изучать, кроме того у меня есть и другие дела, проекты, так же при решении тех или иных микро задач будут возникать трудности, которые я обычно обдумываю занимаясь другими делами, даже когда отдыхаю, смотрю например кино и тд., мне может придти мысль как что можно сделать и затем проверяю это, поэтому всё будет делаться по мере возможности. Но думаю за пару месяцев +- управлюсь.

Назову модуль пока notch, потом название возможно поменяется.

Первоначально надо придумать синтаксис для поиска подстрок:

> - начало строки, в начале(как^);
< - конец строки, в конце(как $);
s - пробел(как \s);
t - табуляция(как \t);
n - (NL) новая строка(как \n);
c - (CR) возврат каретки(как \r);
i - число integer(как \d);
f - число с точкой float;
l - буква(как \w);
L - заглавная буква;
w - слово;
W - слово заглавными буквами;
m - спецсимвол;
a - любой символ(как .);
{text} - конкретный текст;
[zzz] - возможные совпадения(подразумевается "или"), где zzz - шаблон;
(zzz) - захват подстроки, где zzz - шаблон;
* - ноль или более раз повторов;
+ - один или более раз повторов;
*n - ноль или более раз, но не более n;
+n - один или более раз, но не более n;
:n - где n - количество раз повторов;
! - отрицание совпадения;
| - или;
?zzz? - проверка, где zzz - шаблон
#n - захваченная подстрока

Данный синтаксис придумал только что при написании этого сообщения, возможно потом поменяю, что-то добавлю...
Я сделал так чтобы было без использования управляющих символов \n,\r,\s,\w и тд. а использовались простые буквы, ведь это просто шаблон, в котором мы можем описать искомые символы своими значениями и синтаксисом для логики.

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

Правда есть нюанс. Как указывать конкретный спецсимвол который используется в синтаксисе шаблона: *+:!|?#(){}[]
Я над этим вопросом ещё подумаю, может выбрать какой либо спецсимвол после которого писать нужный, например ~:
~({нужный ~{мне~} текст}~) - то есть будет искаться "(нужный {мне} текст)" в круглых скобках с фигурными внутри конкретного текста
~#[iL]:4 - что будет соответствовать "#00AB" двухбайтному числу в шестнадцатеричной форме
возможно так и сделаю, но это не точно
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.06.2024, 15:01
Ответы с готовыми решениями:

Реализация алгоритма поиска в http ответе с помощью регулярных выражений
На входе: 1--------------------------------------------------------------------------------------- HTTP/1.0 401 Unauthorized ...

Как оптимизировать применение регулярных выражений
Как оптимизировать следующий код? string a2 = Regex.Replace(x, p, @&quot;$4&quot;, RegexOptions.IgnoreCase); string a3 = Regex.Replace(x, p,...

Как происходит проверка регулярных выражений в Regex.IsMatch?
Не разберусь что-то никак. Вот простой пример: public bool IsCyrillic(string pattern) { Regex rgx =...

21
Заблокирован
23.06.2024, 14:23
Студворк — интернет-сервис помощи студентам
Помню какой-то популярный фреймворк на расте, где парсер был написан на racket. Использовал языки по назначению. Вот что значит таргетирование)
2
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
24.06.2024, 13:12
Цитата Сообщение от pgb Посмотреть сообщение
на деле я реализую всё задуманное
Как там фреймворк поживает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.06.2024, 13:12
Помогаю со студенческими работами здесь

Объясните, как работает грамматика регулярных выражений ECMAScript
Читаю раздел Alternatives документации по грамматике ECMAScript и не понимаю ни описание механизма работы данной реализации регулярных...

Как найти и заменить подстроку - как есть, без регулярных выражений
Как найти и заменить подстроку - как есть, без регулярных выражений? Уже неделю копаю, но ничего толкового не накопал... Прошу помощи. ...

Как с помощью регулярных выражений можно разделить строку на подстроки?
Всем привет. Как с помощью регулярных выражений можно разделить строку на подстроки? Имеется обычная строка(достаточно большая), необходимо...

Как преобразовать текстовый файл в html с помощью регулярных выражений?
Напишите сценарий, с помощью регулярных выражений преобразующий текстовый файл, заданный аргументом командной строки, в html-файл. ...

Как преобразовать текстовый файл в html с помощью регулярных выражений?
это АНРЕАЛ ребята Напишите сценарий, с помощью регулярных выражений преобразующий текстовый файл, заданный аргументом командной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Опции темы

Новые блоги и статьи
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru