Учитывая регулярное выражение R, которое описывает регулярный язык (без фантастических обратных ссылок). Существует ли алгоритмический способ построения регулярного выражения R *, описывающего язык всех слов, кроме тех, которые описаны в R? Это должно быть возможно, поскольку Wikipedia говорит:
Регулярные языки закрываются под различными операциями, т.е. если языки K и L регулярны, то есть результат следующих операций: [...] дополнение ¬L
Например, учитывая алфавит {a, b, c}, обратный к языку (abc *) + равен (a | (ac | b | c). *)?
Как уже указывал Деннер в комментариях, инверсия регулярного выражения может быть экспоненциально больше исходного. Это делает обратные регулярные выражения непригодными для реализации синтаксиса отрицательных парциальных выражений для целей поиска. Существует ли алгоритм, который сохраняет характеристику времени выполнения O (n * m) (где n - размер регулярного выражения, а m - длина ввода) регулярного выражения и допускает отрицательные подвыражения?