第一次使用Fare项目根据regex表达式生成字符串。
regex字符串“a{1,000}”应该匹配长度在1到5000字符之间的"a“序列。与类Xeger使用相同的regex字符串应该生成长度在1到5000字符之间的字符串序列。
这个非常简单的代码生成“一个{1,000}”100次。
string regex = "a{1,5000}";
Xeger xeger = new Xeger(regex, new Random());
for (int i = 0; i < 100; ++i)
Console.Write(i + "-" + xeger.Generate() + " ");因为我指定了{1,000},所以我希望至少有一些字符串会非常长,但是没有,这就是我得到的结果:
0-aaa 1-aa 2-aa 3-a -a-aaa 3-a-aaa 5-a -aaa 7-a -a 8-a -a 9-a -aaa 11-aa 12-aa 13-aa 14-a 15-aa 16-aa 17-aaaaaaaaa 18 a-a 20-aaa 21-aaa 22-a 23-a aaa 25-a 26-aaaaaaaaa 27-aaa 27-aaa 28-a 29-aaa 31-aaa 32-a 33-aaa 34 a aaaa 37 a aaa 37 a 38 a39-aa 40-aa 41-a 42-aa 43-a 44-a 45-aaa 46-a 47-aa 48-aaa 49-aa 50-a 51-a 52-a 53 a-a 54 a aaa 57-aa 58 a 59 a 60-a 61-aa 62 a 63-a 64-a 65-aa 66-aaa 67-aa 68-aa 69-aa 70 a 71 a 72 a 73 a 74 a 75 aa 76-aa 78-aa79-a 80-aaa 81-aa 82-aa 83-aa 84-a 85-a 86-a 87-aa 88-aa 89-aaa 90-a 91-aaa 92-aa 93-aa 94-aa 95-a 96-aa 97-a 98-a 99 aaa
正如你所看到的,最长的发生是12个字符长。问题在哪里?
发布于 2019-11-11 09:11:13
看起来,Xeger是在每个步骤中随机选择可能的转换,然后在结果中追加匹配该转换的字符串。对于正则表达式,一旦匹配的字符串有1 a,就有两个可能允许的转换:“添加另一个a”或“string的结束”。
我们可以认为这是抛硬币:
结束
为了得到一个100 a的字符串作为结果,这将是像抛硬币和得到100个头连续-一个非常不可能的事件。如您所见,a的字符串越长,发生的可能性就越小!
https://stackoverflow.com/questions/58797532
复制相似问题