我正在编写一个Java实用程序,它可以帮助我生成大量数据以进行性能测试.这将是真的很酷,能够让自己的发电机吐出来匹配这个哪些事情来指定字符串正则表达式.有什么东西已经烘烤,我可以用它来做到这一点?或者是否有一个图书馆让我在那里大部分时间?
谢谢
Che*_*oft 37
编辑:
正如评论中所述,Google Code上有一个库可用于实现此目的:http: //code.google.com/p/xeger
又见https://github.com/mifmif/Generex所建议Mifmif
原始信息:
首先,有足够复杂的正则表达式,我相信这是不可能的.但是你应该能够将一些东西组合在一起以获得简单的正则表达式.
如果你看一下java.util.regex.Pattern类的源代码,你会发现它使用了Node实例的内部表示.每个不同的模式组件都有自己的Node子类实现.这些节点组织成一棵树.
通过生成遍历此树的访问者,您应该能够调用重载的生成器方法或某种将某些内容拼凑在一起的构建器.
Wil*_*ger 19
Xeger(Java)也能够做到这一点:
String regex = "[ab]{4,6}c";
Xeger generator = new Xeger(regex);
String result = generator.generate();
assert result.matches(regex);
Mif*_*mif 19
帮助原始海报为时已晚,但它可以帮助一个新人.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<String> 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
Vla*_*ans 11
这个问题真的很老,尽管这个问题对我来说是实际的。我试过xeger和Generex,但它们似乎不符合我的要求。他们实际上无法处理一些正则表达式模式(如a{60000})或其他(如(A|B|C|D|E|F)),他们只是不产生所有可能的值。由于我没有找到任何其他合适的解决方案 - 我创建了自己的库。
https://github.com/curious-odd-man/RgxGen
该库可用于生成匹配和非匹配字符串。
maven central 上也有神器可用。
用法示例:
RgxGen rgxGen = new RgxGen(aRegex);                     // Create generator
String s = rgxGen.generate();                           // Generate new random value