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

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

Kansas(?! State)

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

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

Плакат указал, что это - ЛАВАШ, чтобы сделать для потенциально большого количества выражений.

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

13
задан Community 23 May 2017 в 11:48
поделиться

1 ответ

Вы не хотите этого делать. На самом деле нет ничего сложного в переводе расширенных функций на базовые - это просто еще одна разновидность компилятора, а составители компиляторов - довольно умные люди, - но большинство вещей, которые решают шикарные функции, (а) невозможно сделать с помощью стандартное регулярное выражение, потому что они распознают нерегулярные языки, поэтому вам придется аппроксимировать их так, чтобы они работали, по крайней мере, для текста ограниченной длины или (b) возможно, но только с регулярным выражением экспоненциального размера. А «экспоненциальный» - это комплиментарный перевод, означающий «не ходи туда». Вы будете завалены ошибками OutOfMemory и, казалось бы, бесконечными циклами, если вы попытаетесь использовать экспоненциальное решение для чего-либо, что вы действительно хотите обработать.

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

2
ответ дан 2 December 2019 в 02:23
поделиться
Другие вопросы по тегам:

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