расширение / расслабление regexp
Господа,
Возник интересный, скорее теоретический и не привязанный к конкретному языку (но весьма животрепещущий с практической точки зрения) вопрос. Предположим имеется regexp X, можно ли из него получить regexp Y который будет матчится на всех значениях где матчится X, но если подсунуть только первый символ аргумента? Проще наверное будет объяснить на конкретных примерах:
- ^A должно превратиться в ^A
- ^AB должно превратиться в ^A
- ^ABC$ должно превратиться в ^A
- ^[ABC]DEF должно превратиться в ^[ABC]
- [ABC] должно превратиться в ^. или .*
И так далее. В принципе домен того с чем матчат ограничен [0-9A-Z]{1,4}, но полный перебор не устраивает. Есть мысли?
ПыСы. Последний пример - совсем теоретический. Волнуют только regexps начинающиеся с ‘^’. Я даже готов обсудить любые другие ограничения которые можно наложить. Но должно легко программно проверяться.