где я есть, спрошу сюда, хоть вопрос и не совсем по теме
Существует ли вообще какое-то in depth руководство по регуляркам? Не на уровне «давайте научимся делать маску для телефонных номеров», а на уровне разжёвывания алгоритмов, осуществляющих все эти волшебные lookahead'ы и рекурсивный поиск
Так как, насколько я знаю, конкретных реализаций как минимум не меньше, чем языков программирования, наиболее интересным было бы разжёвывание re для Python, но на самом деле подойдёт и общий формат с условными блок-схемами
Предвещая вопросы, гугление не особенно привело к успеху
тут бы запомнить все возможности… вечно в маны лезу ради всяких matching/non matching, lookahead/lookbehind якорей… если нужны алгоритмы, то лучше всего в исходники лезть. я бы начал с README вот отсюда: https://github.com/postgres/postgres/tree/master/src/backend/regex
Что ж, прощайте, ближайшие выходные :) Я надеялся, что есть более простые варианты. Спасибо
Раньше как стандартное "практическое" руководство советовали "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, например, она Вам не даст. ;)
> NFA, DFA, алгоритмы и теоремы README в regex/ постгреса отсылает к учебникам за первый курс по CS
Ну да, это традиционно в курсах про компиляторы изучается (что логично), если я правильно помню.
Тайно надеялся, что вы отреагируете, не разочарован)
> Но про алгоритмы там почти ничего нет, если я правильно помню. Вот как раз алгоритмы, как происходит поиск совпадений Джеффри Фридл весьма обстоятельно разжёвывал. Причем на примерах НКА, ДКА и 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, весь этот примитив не относится. ;)
У меня русский перевод 1-го и 3-го изданий. В третьем - гл. 4. Механика обработки регулярных выражений. Это как я понимаю вопрос об алгоритмах.
И как раз про алгоритмы там на самом деле практически ничего нет. Цитата как раз из четвёртой главы. Т.е. он в самом деле пользуется принципом "я знаю regular languages, NFA, DFA, backtracking и много других страшных слов". ;) Зато в плане практического использования regexp engines книга, говорят, хорошая.
> Зато в плане практического использования regexp engines книга, говорят, хорошая. Я ж говорю, при наличии мозгов после изучения материала регулярки не вот уж хочется совать везде и всюду. :)
Обсуждают сегодня