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

新手上路,请多包涵

我正在编写一个 Java 实用程序,它可以帮助我生成大量用于性能测试的数据。如果能够为字符串指定一个正则表达式,以便我的生成器吐出与之匹配的东西,那将是 非常 酷的。

有什么东西已经烤好了我可以用来做这个吗?还是有一个图书馆可以让我大部分时间到达那里?

原文由 Andrew Harmel-Law 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

编辑:

关于这个问题的建议图书馆的完整列表:

  1. Xeger \* - Java
  2. Generex \* - Java
  3. Rgxgen ——Java
  4. rxrdg -C#

\* - 取决于 dk.brics.automaton

编辑: 如评论中所述,Google Code 提供了一个库来实现此目的: https ://code.google.com/archive/p/xeger/

另请参阅 Mifmif 建议的 https://github.com/mifmif/Generex

原始信息:

首先,对于足够复杂的正则表达式,我相信这是不可能的。但是您应该能够将一些东西放在一起以获得简单的正则表达式。

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

通过生成一个遍历这棵树的访问者,您应该能够调用一个重载的生成器方法或某种将某些东西拼凑在一起的生成器。

原文由 Cheekysoft 发布,翻译遵循 CC BY-SA 4.0 许可协议

帮助原始海报为时已晚,但它可以帮助新人。 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

披露

这篇帖子提到的项目属于用户回答(Mifmif)的问题。按照 规则,这需要提出来。

原文由 Mifmif 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏