生成与正则表达式匹配的字符串的C#代码

生成与正则表达式匹配的字符串的C#代码,c#,regex,C#,Regex,我使用正则表达式验证用户输入。现在,我可以配置正则表达式,这样可以帮助用户查看如何格式化确定输入的示例 是否可以生成与任意正则表达式匹配的字符串?甚至有一个在某处可用的实现吗 更新: 由于许可证原因,我不能使用REX。还有其他可能性吗?几乎肯定没有,没有 在您正在查看的上下文中,正则表达式通常用于检查字符串是否与给定格式匹配。如果您知道自己的格式应该是什么,并且正在为其编写正则表达式,那么就没有理由不能足够轻松地生成自己的测试数据 [编辑-似乎有一些示例。但这忽略了一个事实,即要测试您的正则表达

我使用正则表达式验证用户输入。现在,我可以配置正则表达式,这样可以帮助用户查看如何格式化确定输入的示例

是否可以生成与任意正则表达式匹配的字符串?甚至有一个在某处可用的实现吗

更新:
由于许可证原因,我不能使用REX。还有其他可能性吗?

几乎肯定没有,没有

在您正在查看的上下文中,正则表达式通常用于检查字符串是否与给定格式匹配。如果您知道自己的格式应该是什么,并且正在为其编写正则表达式,那么就没有理由不能足够轻松地生成自己的测试数据


[编辑-似乎有一些示例。但这忽略了一个事实,即要测试您的正则表达式是否正确,您必须已经有了书面测试数据。因此您应该已经有了字符串。]

尝试使用此应用程序Rex可以做到这一点:)

对于java,它是

因此有许多正则表达式匹配生成器:)

这是:


它是c#

中的xeger包装器,正如注释中所指定的,Rex工具将完成此任务-

使用Rex创建与您的模式匹配的字符串:

按如下方式运行
rex.exe

rex.exe "your_regex_pattern_here" /k:your_required_examples_num_here
更多信息:

一些解决方案:

(1) 如果正则表达式是由您(而不是用户)编写的,并且很少更改,那么为什么要以编程方式创建任何东西呢?你可以手工制作一些很好的例子

(2) 使用现成的溶液。(见其他答案)

(3) ,所有随机生成问题的大锤解决方案:创建一个随机字符串并检查它是否与正则表达式匹配。如果没有,请再试一次。如果正则表达式非常具体,那么这个解决方案的性能就非常糟糕

(4) 实现一个解析器,将正则表达式转换为字符串构造树,该树由以下节点组成。每个节点都有一个遵循特定规则的
CreateRandomString
方法。创建随机字符串意味着为根节点调用该方法

连接:遍历所有子树并按顺序连接结果

随机选择:选择随机子树并遍历它。返回结果

乘法:在a和b之间创建一个随机数n。遍历子树n次并连接结果

叶:返回一个常量字符串


创建解析器是一个棘手的部分,尤其是嵌套结构。(我已经为类似正则表达式的语法编写了一个。)

我建议研究:,它们会做这样的事情。让我知道它是否适合您。请查看此网站:。输入您想要的任何正则表达式,然后查看
一些随机匹配
部分。当你的正则表达式开始变得复杂时,你可能会对所提出的建议感到惊讶。
*
会生成什么?取决于选项,除了换行符或其他所有内容。我认为应该可以在.net中有一个类似regexparser的类,而不是检查规则,而是选择一个有效字符的示例正则表达式中的每个标记,并将其附加到示例字符串中。在您描述的情况下,您将提供表达式来验证数据。那么,您肯定已经知道数据了,首先编写了表达式吗?不,用户还没有输入要匹配的字符串。我想给他讲一些有效的例子,但是如果你脑子里还没有有效的例子,你是如何编写正则表达式的呢?为什么不给他这些?毕竟,这是你自己的应用程序。我确实考虑过它,因为它们是必须有特定模式的零件号。用户可以为自己的部件选择自己的编号,但必须遵守该模式。Ex很酷,但由于许可证的原因,我无法使用它。@schoetbi我在C#中找到了这是xeger的包装器,试试这个:)Fare看起来不错,它包括一个xeger端口。由于.net framework的正则表达式解析器是纯托管的,因此我将尝试考虑第4个问题。但后来我发现车费相当不错。regex发生了变化,其中有几个变化,用户(而不是最终用户)也可以配置这些变化;)