2013-07-08 19 views
7

我使用正则表达式来验证用户输入。现在我可以配置正则表达式,因此它可以帮助用户查看某个特定输入如何格式化的示例。C#代码来生成匹配正则表达式的字符串

是否有可能生成一些匹配任意正则表达式的字符串?甚至有一个实现可用的地方?

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

+1

我建议你看看:http://research.microsoft.com/en-us/projects/rex/,他们做了这样的事情。请让我知道这对你有没有用。 –

+1

看看这个网站:http://debuggex.com。输入你想要的任何正则表达式,然后看看“一些随机匹配”部分。当您的正则表达式开始变得复杂时,您可能会感到惊讶。 – Stephan

+0

'。*'可能产生什么? – Toto

回答

6

尝试使用这个应用程序雷克斯能做到这一点:)

http://research.microsoft.com/en-us/projects/rex/

对于Java这是 https://code.google.com/p/xeger/

所以有很多的正则表达式匹配发电机:)

这: https://github.com/moodmosaic/Fare

这是xeger在C#包装

在评论中指定
+0

雷克斯很酷,但由于许可证,我无法使用它。 – schoetbi

+1

@schoetbi我发现这个https://github.com/moodmosaic/Fare它是C#中xeger的包装,试试这个:) – wudzik

+0

票价看起来不错,它包含一个Xeger端口。我会试一试 – schoetbi

0

几乎肯定不是,不。

在您查看的上下文中,通常使用正则表达式来检查字符串是否与给定格式相匹配。如果你知道你的格式应该足够好以至于你正在写一个正则表达式,那么你应该没有理由不能轻易地生成你自己的测试数据。

[编辑 - 它似乎有一些例子。但是这确实忽略了这样一个事实,为了测试你的正则表达式是否正确,你必须已经写好了测试数据。所以,你应该已经有你的字符串。]

+0

我认为应该有可能在.net中有类似regexparser的类,而不是检查规则,为正则表达式中的每个标记挑选一个有效字符的示例,并将其附加到示例字符串中。 – schoetbi

+0

在你描述的情况下,你提供了用来验证数据的表达式。所以你肯定知道这些数据,首先写出这个表达式? –

+0

否用户尚未输入要匹配的字符串。我想给他介绍一些有效的例子。 – schoetbi

1

,獭工具会做的伎俩 -

使用雷克斯创建符合模式的字符串:如下

运行rex.exe

rex.exe "your_regex_pattern_here" /k:your_required_examples_num_here 

对此的详细信息:Rex Guide

2

一些解决方案:

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

(2)使用现成的解决方案。 (看到其他答案)

(3)Rejection sampling,大锤解决所有随机生成问题:创建一个随机字符串,并检查它是否匹配正则表达式。如果不是,请再试一次。如果正则表达式非常具体,那么这个解决方案的性能很差。 (4)实现将正则表达式转换为字符串构造树的解析器,该构造树例如由以下构成:下面的节点。每个节点都有一个遵循特定规则的CreateRandomString方法。创建一个随机字符串意味着为根节点调用该方法。

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

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

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

:返回一个常量字符串。

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

+0

由于.net框架的正则表达式解析器是纯管理的,因此我会讨论数字4。但后来我发现票价相当不错。正则表达式的变化,有几个,他们也可以由用户配置(不是终端用户);) – schoetbi

相关问题