Возможно ли создать примерную строку на основе шаблона регулярного выражения?

В моем приложении пользователь может ввести свой собственный шаблон регулярного выражения в текстовое поле, чтобы он мог принудительно ввести определенный ввод для другого пользователя/текстового поля. Возможно ли пользователю увидеть пример строки, которая будет соответствовать введенному регулярному выражению? Например, если он должен был ввести: ^[A-Z]{2}$, он генерировал бы строку типа "XX", чтобы показать пользователю, что он может ввести только две заглавные буквы.

Если нет простого способа выполнить это (и я предполагаю, что нет), насколько сложно было бы построить? Или что-то подобное уже существует?

Ответы

Ответ 1

Проверьте Xeger. Похоже, он может делать то, что вы хотите. Это на Java, хотя.

Вот пример из набора тестов:

   @Test
    public void shouldGenerateTextCorrectly() {
        String regex = "[ab]{4,6}c";
        Xeger generator = new Xeger(regex);
        for (int i = 0; i < 100; i++) {
            String text = generator.generate();
            assertTrue(text.matches(regex));
        }
    }

Обновление: благодаря Nikos Baxevanis, dk.brics.automaton были перенесены на С# на https://github.com/moodmosaic/Fare

Ответ 2

Для С# вы также можете посмотреть проект Fare. Для получения дополнительной информации см. этот ответ.

Пример

var regex = @"((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)";
var xeger = new Xeger(regex);

var result = Regex.IsMatch(xeger.Generate(), regex);
// -> Prints 'true'

Ответ 3

Мне тоже понадобилась такая вещь, поэтому я создал простую программу с gui, использующую xeger lib, упомянутую выше. Просто запустите .jar из папки dist (требуется jre) https://github.com/ogyct/SampleFromRegex