我使用正则表达式来验证用户输入。现在我可以配置正则表达式,以便帮助用户查看某些输入应该格式化的示例。
是否有可能生成与任意正则表达式匹配的字符串?是否有可用的实现?
更新: 由于许可证的限制,我不能使用REX。还有其他可能性吗?
尝试使用这个应用程序,Rex可以做到这一点 :)
http://research.microsoft.com/en-us/projects/rex/
对于Java来说,这是一个正则表达式匹配生成器: https://code.google.com/p/xeger/ 所以有很多正则表达式匹配生成器 :)一些解决方案:
(1) 如果正则表达式是由您编写的(而不是用户),并且很少更改,为什么要编写任何程序呢?您可以手动创建一些漂亮的示例。
(2) 使用现成的解决方案。(请参见其他答案)
(3) 拒绝抽样,解决所有随机生成问题的万能方法:创建一个随机字符串并检查它是否与正则表达式匹配。如果不匹配,请重试。但是,如果正则表达式非常特定,则此解决方案的性能非常糟糕。
(4) 实现一个解析器,将正则表达式转换为字符串构造树,该树由以下节点组成。每个节点都有一个CreateRandomString
方法,遵循某些规则。创建随机字符串意味着为根节点调用该方法。
连接:遍历所有子树并按顺序连接结果。
随机选择:选择一个随机子树并遍历它。返回结果。
乘法:创建介于a和b之间的随机数字n。遍历子树n次并连接结果。
叶子:返回一个常量字符串。
创建解析器是棘手的部分: ),特别是嵌套结构。(我已经为类似于正则表达式的语法编写过一个。)
rex.exe
,如下所示:rex.exe "your_regex_pattern_here" /k:your_required_examples_num_here
几乎可以肯定不是这样的。
正则表达式通常用于检查字符串是否符合给定格式,如果您知道您的格式足够好,以至于您正在为其编写正则表达式,那么您应该很容易地生成自己的测试数据。
[编辑-似乎有一些例子。但是这忽略了一个事实,即要测试您的正则表达式是否正确,您必须已经编写了测试数据。因此,您应该已经拥有您的字符串。]
.*
可以生成什么? - Toto