Как преобразовать PCRE в POSIX RE?

Этот интересный вопрос Regex, чтобы сопоставить что-либо (включая пустую строку), за исключением конкретной заданной строки, касалось того, как делать негативный прогноз в MySQL. Плакат хотел получить эффект

Kansas(?! State)

поскольку MySQL не реализует прогнозные утверждения, ряд ответов подошел к эквиваленту

Kansas($|[^ ]| ($|[^S])| S($|[^t])| St($|[^a])| Sta($|[^t])| Stat($|[^e]))

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

Существует ли script/утилита/режим PCRE (или какой-либо другой пакет), который преобразует PCRE (если возможно) в эквивалентное регулярное выражение, которое не использует функции Perl snazzy? Я полностью понимаю, что некоторые регулярные выражения в стиле Perl не могут быть указаны как обычные регулярные выражения, поэтому я не ожидал, что инструмент сделает невозможное, конечно!

Ответ 1

Вы не хотите этого делать. На самом деле не сложно перевести передовые функции на основные функции - это просто еще один аромат компилятора, а авторы компиляторов - довольно умные люди, но большинство вещей, которые решают проблемы, являются (a) невозможными стандартное регулярное выражение, потому что они распознают нерегулярные языки, поэтому вам придется их аппроксимировать так, чтобы они, по крайней мере, работали с текстом ограниченной длины или (б), но только с регулярным выражением экспоненциального размера. И "экспоненциальный" - это compsci-talk для "не туда". Если вы попытаетесь использовать экспоненциальное решение во всем, что вы на самом деле хотите обработать, вы получите болото в ошибках OutOfMemory и, казалось бы, бесконечных циклах.

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