Одно довольно уродливое решение, которое может или не может быть практичным, состоит в том, чтобы использовать существующую опцию диагностики регулярных выражений. Некоторые библиотеки регулярных выражений имеют возможность выяснить, где регулярное выражение не удалось сопоставить. В этом случае вы могли бы использовать то, что фактически является формой грубой силы, но используя по одному символу за раз и пытаясь получить более длинные (и более подходящие) строки, пока не получите полное совпадение. Это очень уродливое решение. Однако, в отличие от стандартного решения грубой силы, его сбой в строке типа ab также скажет вам, существует ли строка ab. *, Которая будет соответствовать (если нет, остановитесь и попробуйте ac. Если так, попробуйте более длинную строку). Это возможно не для всех библиотек регулярных выражений.
С другой стороны, такое решение, вероятно, довольно круто с точки зрения преподавания. На практике это, вероятно, похоже на решение dfa, но без необходимости думать о dfas.
Обратите внимание, что вы не захотите использовать случайные строки с этой техникой. Однако вы можете использовать случайные символы для начала, если будете следить за тем, что вы тестировали в дереве, так что эффект тот же.