172 похожих чатов

Так как у этого чата самый высокий охват среди тех,

где я есть, спрошу сюда, хоть вопрос и не совсем по теме

Существует ли вообще какое-то in depth руководство по регуляркам? Не на уровне «давайте научимся делать маску для телефонных номеров», а на уровне разжёвывания алгоритмов, осуществляющих все эти волшебные lookahead'ы и рекурсивный поиск

Так как, насколько я знаю, конкретных реализаций как минимум не меньше, чем языков программирования, наиболее интересным было бы разжёвывание re для Python, но на самом деле подойдёт и общий формат с условными блок-схемами

Предвещая вопросы, гугление не особенно привело к успеху

11 ответов

15 просмотров

тут бы запомнить все возможности… вечно в маны лезу ради всяких matching/non matching, lookahead/lookbehind якорей… если нужны алгоритмы, то лучше всего в исходники лезть. я бы начал с README вот отсюда: https://github.com/postgres/postgres/tree/master/src/backend/regex

Artemiy-Dubovoy Автор вопроса
Виктор Егоров
тут бы запомнить все возможности… вечно в маны лез...

Что ж, прощайте, ближайшие выходные :) Я надеялся, что есть более простые варианты. Спасибо

Раньше как стандартное "практическое" руководство советовали "Mastering Regular Expressions", Jeffrey E. F. Friedl. Но про алгоритмы там почти ничего нет, если я правильно помню. > а на уровне разжёвывания алгоритмов, осуществляющих все эти волшебные lookahead'ы и рекурсивный поиск А в этом как раз ничего "хитрого" нет — почти всё это (почти во всех движках) всего лишь backtracking c "оптимизациями". > Так как, насколько я знаю, конкретных реализаций как минимум не меньше, чем языков программирования Есть сайты (со ссылками и практическим сравнением реализаций), например https://www.regular-expressions.info/ или https://www.rexegg.com/ . > Предвещая вопросы, гугление не особенно привело к успеху Наверное, потому, что "основа" (настоящие регулярные выражения / языки, NFA, DFA, алгоритмы и теоремы) — это совсем уж "классика" (и почти все движки её, как ни странно, не используют ;) ). По идее, описано в любой книге про parsing, например в Dragon Book. > А то создаётся впечатление, что регулярки — это какой-то чёрный ящик. Да ничего "волшебного", на самом деле, в большинстве движков нет. > Я надеялся, что есть более простые варианты. А вот в PostgreSQL-овский движок я Вам лезть очень не советую — это уникальная (и очень сложная) реализация, резко отличающаяся от всех привычных (описанных выше), на уровне подхода. Т.е. понимания того, как работает движок Python, например, она Вам не даст. ;)

Yaroslav Schekin
Раньше как стандартное "практическое" руководство ...

> NFA, DFA, алгоритмы и теоремы README в regex/ постгреса отсылает к учебникам за первый курс по CS

Виктор Егоров
> NFA, DFA, алгоритмы и теоремы README в regex/ п...

Ну да, это традиционно в курсах про компиляторы изучается (что логично), если я правильно помню.

Artemiy-Dubovoy Автор вопроса
Yaroslav Schekin
Раньше как стандартное "практическое" руководство ...

Тайно надеялся, что вы отреагируете, не разочарован)

Yaroslav Schekin
Раньше как стандартное "практическое" руководство ...

> Но про алгоритмы там почти ничего нет, если я правильно помню. Вот как раз алгоритмы, как происходит поиск совпадений Джеффри Фридл весьма обстоятельно разжёвывал. Причем на примерах НКА, ДКА и POSIX. После внимательного изучения материала становится ясной хохма: - у нас была одна проблема, мы попытались решить её регулярными выражениями, таперича у нас две проблемы.

Михаил Шурутов
> Но про алгоритмы там почти ничего нет, если я пр...

Да нет там практически ничего (сейчас пролистал третье издание), я правильно вижу? Более того, там написано: The two basic technologies behind regular-expression engines have the somewhat imposing names Nondeterministic Finite Automaton (NFA) and Deterministic Finite Automaton (DFA). With mouthfuls like this, you see why I stick to just “NFA” and “DFA”. We won’t be seeing these phrases spelled out again. I suppose I could explain the underlying theory that goes into these names, if I only knew it! As I hinted, the word deterministic is pretty important, but for the most part the theory is not relevant, so long as we understand the practical effects. И, опять-таки, к тому, как происходит поиск совпадений в RE engine PostgreSQL, весь этот примитив не относится. ;)

Yaroslav Schekin
Да нет там практически ничего (сейчас пролистал тр...

У меня русский перевод 1-го и 3-го изданий. В третьем - гл. 4. Механика обработки регулярных выражений. Это как я понимаю вопрос об алгоритмах.

Михаил Шурутов
У меня русский перевод 1-го и 3-го изданий. В трет...

И как раз про алгоритмы там на самом деле практически ничего нет. Цитата как раз из четвёртой главы. Т.е. он в самом деле пользуется принципом "я знаю regular languages, NFA, DFA, backtracking и много других страшных слов". ;) Зато в плане практического использования regexp engines книга, говорят, хорошая.

Yaroslav Schekin
И как раз про алгоритмы там на самом деле практиче...

> Зато в плане практического использования regexp engines книга, говорят, хорошая. Я ж говорю, при наличии мозгов после изучения материала регулярки не вот уж хочется совать везде и всюду. :)

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта