Проблема может быть переформулирована как «сделать языки, описанные двумя или более регулярными
выражения имеют непустое пересечение "?
Если вы ограничите вопрос регулярными выражениями pure (без обратных ссылок, посмотрите в будущее,
или другие функции, которые позволяют распознавать контекстно-свободные или более сложные
языки), вопрос как минимум решаем. Обычные языки закрыты под
пересечение, и есть алгоритм, который принимает два регулярных выражения
в качестве входных данных и за конечное время создает DFA, который распознает пересечение.
Каждое регулярное выражение может быть преобразовано в недетерминированный конечный автомат,
а затем к детерминированному конечному автомату. Пара DFA может быть преобразована
в DFA, который распознает пересечение. Если есть путь от
начальное состояние до любого принимающего состояния этого конечного DFA, пересечение не пустое
(«конфликт», используя вашу терминологию).
К сожалению, при преобразовании начального NFA возможен экспоненциальный выброс
для DFA, поэтому проблема быстро становится неосуществимой на практике, так как размер
входные выражения растут.
И если разрешены расширения для чистых регулярных выражений, все ставки отключены -
такие языки больше не закрыты на пересечении, поэтому эта конструкция не будет
работа.