Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以基于正则表达式模式生成示例字符串?_C#_Regex_String - Fatal编程技术网

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

C# 是否可以基于正则表达式模式生成示例字符串?,c#,regex,string,C#,Regex,String,在我的应用程序中,用户可以在文本框中输入自己的正则表达式模式,以便强制其他用户/文本框进行特定输入。用户是否可能看到与他输入的正则表达式匹配的字符串示例?例如,如果他要输入:^[A-Z]{2}$,它将生成一个类似“XX”的字符串,向用户显示他只能输入两个大写字母 如果没有简单的方法来实现这一点(我想没有),那么构建有多困难?或者类似的东西已经存在了吗?请退出。看起来它可以做你想做的事。不过它是用Java编写的 以下是测试套件中的一个示例: @Test public void sho

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

如果没有简单的方法来实现这一点(我想没有),那么构建有多困难?或者类似的东西已经存在了吗?

请退出。看起来它可以做你想做的事。不过它是用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));
        }
    }
@测试
public void应生成extcorrect(){
字符串regex=“[ab]{4,6}c”;
Xeger生成器=新的Xeger(正则表达式);
对于(int i=0;i<100;i++){
String text=generator.generate();
assertTrue(text.matches(regex));
}
}
更新:多亏了Nikos Baxevanis,dk.brics.automaton已经被移植到了C的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'

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

这正是我想要的。。但是对于C#。至少我有一些东西可以用作参考。Xeger只是一个薄薄的包装器,它是一些regexp操作的DFA/NFA实现。也许C#某处也有类似的功能?@MartinWickman是的,dk.brics.automaton和xeger源代码都已移植到C#at see,这可能会对您有所帮助。Nikos,如果您使用FareAlberto显示代码示例,这将非常有用,我刚刚添加了一个示例。希望有帮助。