当前位置:  开发笔记 > 编程语言 > 正文

使用Regex生成字符串而不是匹配它们

如何解决《使用Regex生成字符串而不是匹配它们》经验,为你挑选了3个好方法。

我正在编写一个Java实用程序,它可以帮助我生成大量数据以进行性能测试.这将是真的很酷,能够让自己的发电机吐出来匹配这个哪些事情来指定字符串正则表达式.有什么东西已经烘烤,我可以用它来做到这一点?或者是否有一个图书馆让我在那里大部分时间?

谢谢



1> Cheekysoft..:

编辑:

正如评论中所述,Google Code上有一个库可用于实现此目的:http: //code.google.com/p/xeger

又见https://github.com/mifmif/Generex所建议Mifmif

原始信息:

首先,有足够复杂的正则表达式,我相信这是不可能的.但是你应该能够将一些东西组合在一起以获得简单的正则表达式.

如果你看一下java.util.regex.Pattern类的源代码,你会发现它使用了Node实例的内部表示.每个不同的模式组件都有自己的Node子类实现.这些节点组织成一棵树.

通过生成遍历此树的访问者,您应该能够调用重载的生成器方法或某种将某些内容拼凑在一起的构建器.



2> Wilfred Spri..:

Xeger(Java)也能够做到这一点:

String regex = "[ab]{4,6}c";
Xeger generator = new Xeger(regex);
String result = generator.generate();
assert result.matches(regex);



3> Mifmif..:

帮助原始海报为时已晚,但它可以帮助一个新人.Generex是一个有用的java库,它提供了许多使用正则表达式生成字符串的功能(随机生成,根据索引生成字符串,生成所有字符串......).

示例:

Generex generex = new Generex("[0-3]([a-c]|[e-g]{1,2})");

// generate the second String in lexicographical order that matches the given Regex.
String secondString = generex.getMatchedString(2);
System.out.println(secondString);// it print '0b'

// Generate all String that matches the given Regex.
List matchedStrs = generex.getAllMatchedStrings();

// Using Generex iterator
Iterator iterator = generex.iterator();
while (iterator.hasNext()) {
    System.out.print(iterator.next() + " ");
}
// it prints 0a 0b 0c 0e 0ee 0e 0e 0f 0fe 0f 0f 0g 0ge 0g 0g 1a 1b 1c 1e
// 1ee 1e 1e 1f 1fe 1f 1f 1g 1ge 1g 1g 2a 2b 2c 2e 2ee 2e 2e 2f 2fe 2f 2f 2g
// 2ge 2g 2g 3a 3b 3c 3e 3ee 3e 3e 3f 3fe 3f 3f 3g 3ge 3g 3g 1ee

// Generate random String
String randomStr = generex.random();
System.out.println(randomStr);// a random value from the previous String list


看起来Generex是你自己的项目.根据规则[这里](http://stackoverflow.com/help/behavior),你介意在你的帖子中提到这是你自己的项目吗?
推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有