是否可以基于正则表达式模式生成示例字符串?

Fus*_*ion 14 c# regex string

在我的应用程序中,用户可以将自己的正则表达式模式输入到文本框中,这样他就可以强制为另一个用户/文本框输入特定的输入.用户是否可以查看与他输入的正则表达式匹配的字符串示例?例如,如果他要输入:^[A-Z]{2}$,它将生成一个类似" XX" 的字符串,以向用户显示他只能输入两个大写字母.

如果没有简单的方法来实现这一点(我认为没有),那么构建有多难?或者这样的事情已经存在?

Mar*_*man 8

查看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));
        }
    }
Run Code Online (Sandbox Code Playgroud)

更新:感谢Nikos Baxevanis,dk.brics.automaton已经移植到C#,https://github.com/moodmosaic/Fare


Nik*_*nis 8

对于C#,您可能还想查看项目费用.有关详细信息,请查看答案.

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

var result = Regex.IsMatch(xeger.Generate(), regex);
// -> Prints 'true'
Run Code Online (Sandbox Code Playgroud)