Возможно ли создать примерную строку на основе шаблона регулярного выражения?
В моем приложении пользователь может ввести свой собственный шаблон регулярного выражения в текстовое поле, чтобы он мог принудительно ввести определенный ввод для другого пользователя/текстового поля. Возможно ли пользователю увидеть пример строки, которая будет соответствовать введенному регулярному выражению? Например, если он должен был ввести: ^[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