Некоторые решения:
(1) Если регулярное выражение написано вами (а не пользователем) и редко изменяется, зачем создавать что-либо программно? Вы могли бы просто создать несколько хороших примеров вручную.
(2) Используйте готовое решение. (см. другие ответы)
(3) Rejection sampling, решение кувалды для всех случайных проблем генерации: создать случайную строку и проверить, соответствует ли она регулярному выражению. Если нет, попробуйте еще раз. Если регулярное выражение очень специфично, это решение имеет ужасную производительность.
(4) Реализовать парсер, который преобразует регулярное выражение в дерево построения строк, которое состоит, например, узлов ниже. Каждый узел имеет метод CreateRandomString
, который следует определенным правилам. Создание случайной строки означает вызов этого метода для корневого узла.
конкатенация: Проведите все дочерние поддеревья и соедините результаты на заказ.
случайный выбор: Выберите случайное дочернее поддерево и переместите его. Верните результат.
умножение: создать случайное число n между a и b. Пройдите в поддереве n раз и соедините результаты.
лист: возвращает постоянную строку.
Создание парсера - сложная часть :), особенно вложенные структуры. (Я написал один для синтаксиса, аналогичного регулярным выражениям.)
Предлагаю посмотреть: http://research.microsoft.com/en-us/projects/rex/, они делают такую вещь. сообщите мне, если это сработает для вас. –
Проверьте этот сайт: http://debuggex.com. Введите любое регулярное выражение, которое вы хотите, и посмотрите на раздел «Некоторые случайные совпадения». Вы можете быть удивлены предложениями, когда ваше регулярное выражение начинает усложняться. – Stephan
Что может быть создано '. *'? – Toto