相关疑难解决方法(0)

如何生成与给定正则表达式匹配的随机字符串?

重复:

与正则表达式匹配的随机字符串

不,不是.我正在寻找一种简单而通用的方法,我可以实际实现.这比随机生成密码困难得多.


我想创建一个采用正则表达式的应用程序,并显示10个与该表达式匹配的随机生成的字符串.它应该帮助人们更好地理解他们的regexp,并决定他们是否足够安全以进行验证.有谁知道一个简单的方法吗?

一个显而易见的解决方案是编写(或窃取)正则表达式解析器,但这似乎真的在我脑海中.

我再说一遍,我正在寻找一种简单而通用的方法来做到这一点.

编辑:蛮力方法是不可能的.假设随机字符串仅为[a-z0-9]{10}每秒100万次迭代,则需要花费65年的时间来迭代所有10-char字符串的空间.

regex random reverse parsing

20
推荐指数
2
解决办法
1万
查看次数

生成正则表达式的所有有效值

我知道通过使用Xeger,我们可以获得指定模式的随机值.

String regex = "[0-9]{2}"; 
Xeger generator = new Xeger(regex);
String result = generator.generate();
Run Code Online (Sandbox Code Playgroud)

我想知道有没有办法返回指定正则表达式的所有有效字符串.例如,对于模式:[0-9]{2},我们可以得到所有的值0099.

谢谢

编辑:

在这里,我们不考虑像+和*这样的无限输出; 我们如何获得有限正则表达式的所有值?

最后编辑:

感谢大家!最后,我没有考虑所有可能的值,因为可能有数千个.我将特定数量限制为减少数量的值的数量.

java regex generator

17
推荐指数
2
解决办法
2757
查看次数

如何获得std :: regex的所有匹配项

我想找到所有可能的正则表达式匹配,怎么可能?

regex rx("(2|25)");
string s = "2225";
for (sregex_iterator it(s.begin(), s.end(), rx), end; it != end; ++it) {
    cout << it->position() << ": " << it->str() << endl;
}
Run Code Online (Sandbox Code Playgroud)

给出输出:

0: 2
1: 2
2: 25
Run Code Online (Sandbox Code Playgroud)

但是找不到第三名2: 2.我更喜欢使用正则表达式,因为O(n)同时搜索多个令牌的复杂性.

更新:

也许将令牌列表拆分为不可加前缀的列表并创建几个正则表达式?例如:(2|4|25|45|251|455|267)=> ,,(2|4) 这将增加复杂性,像(25|45|267)(251|455)O(n log(m))

更新2:

请提供基于STL的简短算法,将令牌向量拆分为非前缀向量以回答此问题.

c++ regex stl c++11

8
推荐指数
1
解决办法
785
查看次数

标签 统计

regex ×3

c++ ×1

c++11 ×1

generator ×1

java ×1

parsing ×1

random ×1

reverse ×1

stl ×1