java使用正则表达式生成字符串而不是匹配字符串
我正在编写一个Java实用程序,它可以帮助我生成性能测试所需的数据负载。如果能够为字符串指定一个正则表达式,那么我的生成器将输出与此匹配的内容,这将是非常酷的。有没有什么东西已经烤好了,我可以用它来做这个?还是有一个图书馆能让我大部分时间都在那里
谢谢
你可以在下面搜索框中键入要查询的问题!
我正在编写一个Java实用程序,它可以帮助我生成性能测试所需的数据负载。如果能够为字符串指定一个正则表达式,那么我的生成器将输出与此匹配的内容,这将是非常酷的。有没有什么东西已经烤好了,我可以用它来做这个?还是有一个图书馆能让我大部分时间都在那里
谢谢
# 1 楼答案
编辑:
关于此问题的建议图书馆的完整列表:
*-取决于
dk.brics.automaton
编辑: 如评论中所述,谷歌代码中提供了一个库来实现这一点: https://code.google.com/archive/p/xeger/
另见Mifmif建议的https://github.com/mifmif/Generex
原始消息:
首先,对于足够复杂的regexp,我相信这是不可能的。但是您应该能够为简单的regexp组合一些东西
如果你看一看java类的源代码。util。正则表达式。模式,您将看到它使用节点实例的内部表示。每个不同的模式组件都有自己的节点子类实现。这些节点被组织成一棵树
通过生成一个遍历此树的访问者,您应该能够调用一个重载的生成器方法或某种将某些内容拼凑在一起的构建器
# 2 楼答案
现在帮助原创海报已经太晚了,但它可以帮助新来者Generex是一个有用的java库,它提供了许多使用正则表达式生成字符串的功能(随机生成、基于其索引生成字符串、生成所有字符串…)
例如:
披露
这篇文章中提到的项目属于回答这个问题的用户(MIF)。根据rules,这一点需要提出来
# 3 楼答案
这个问题真的很老了,尽管这个问题对我来说是实际存在的。 我试过xeger和Generex,但它们似乎不符合我的要求。 它们实际上无法处理某些正则表达式模式(如
a{60000}
)或其他正则表达式模式(如(A|B|C|D|E|F)
),它们只是不能生成所有可能的值。因为我没有找到任何其他合适的解决方案,所以我创建了自己的库https://github.com/curious-odd-man/RgxGen
此库可用于生成匹配字符串和非匹配字符串
maven central上也有可用的工件
用法示例:
# 4 楼答案
在stackoverflow播客11上:
这可能不是你想要的,但它可能是一个很好的起点,而不是创造你自己的
我似乎在google中找不到任何东西,因此我建议通过将给定的正则表达式解析为最小的工作单元(\w、[x-x]、\d等)并编写一些基本方法来支持这些正则表达式短语来解决这个问题
因此,对于\w,您将有一个方法getRandomLetter()返回任意随机字母,还有一个方法getRandomLetter(char startedter,char endLetter),它在两个值之间提供一个随机字母
# 5 楼答案
为此,我已经开始滚动我的own库(在c#中,但对于Java开发人员来说应该很容易理解)
Rxrdg最初是为了解决为实际项目创建测试数据的问题。基本思想是利用现有的(正则表达式)验证模式来创建符合这些模式的随机数据。这样可以创建有效的随机数据
为简单的正则表达式模式编写解析器并不困难。使用抽象语法树生成字符串应该更容易
# 6 楼答案
Xeger (Java)也有能力做到这一点: