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

时间:2010-06-28 09:18:05

标签: c# regex string

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

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

3 个答案:

答案 0 :(得分: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));
        }
    }

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

答案 1 :(得分:8)

对于C#,您可能还想查看项目Fare。有关详细信息,请查看this答案。

示例

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

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

答案 2 :(得分:0)

我曾经也需要这样的东西,所以我用gui使用上面提到的xeger lib创建了一个简单的程序。只需从dist文件夹运行.jar(需要jre) https://github.com/ogyct/SampleFromRegex