Если вы ограничиваетесь подмножеством регулярных выражений, которые привязаны на обоих концах и включают только буквальный текст, подстановочные знаки из одного символа и чередование, сопоставление
Строки должны быть довольно легко перечислить. Я, вероятно, переписал бы регулярное выражение как грамматику БНФ
и использовать это для генерации исчерпывающего списка совпадающих строк. Для вашего примера:
<lang> -> <begin> <middle> <end>
<begin> -> "My "
<middle> -> "" | "real" | "biological"
<end> -> " name is Steve"
Начните с производств, которые имеют только терминальные символы в RHS, и перечислите
все возможные значения, которые может принять нетерминал на LHS. Тогда работай своим
вплоть до постановок с нетерминалами на RHS. Для объединения нетерминальных символов сформируйте декартово произведение множеств, представленных каждым нетерминалом RHS.
Для чередования возьмем объединение множеств, представленных каждой опцией. Продолжить
пока вы не доберетесь до <lang>
, тогда все готово.
Однако, если вы включите операторы «*» или «+», вам придется бороться с бесконечным
количество совпадающих строк. И если вы также хотите обрабатывать расширенные функции, такие как обратные ссылки ... вы, вероятно, уже на пути к чему-то изоморфному
к проблеме остановки!