票价/齐格

我第一次使用Fare项目根据正则表达式生成字符串。

正则表达式字符串“ a {1,5000}”应匹配长度在1到5000个字符之间的“ a”序列。 与Xeger类一起使用的正则表达式字符串应生成长度在1到5000个字符之间的字符串序列。

这个非常简单的代码可生成100次“ a {1,5000}”。

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,5000},所以我希望至少有一些字符串会非常长,但是没有,这就是我得到的:

  

0-aaa 1-aa 2-aa 3-a 4-aaa 5-a 6-aaa 7-a 8-a 9-a 10-aaa 11-aa 12-aa 13-aa 14-a 15- aa 16-aa 17-aaaaaaaaaaaaaa 18-a 19-a 20-aaa 21-aaa 22-a 23-a 24-aaaa 25-a 26-aaaaaaaaa 27-aaa 28-a 29-a 30-aaa 31-aaaa 32 -a 33-aaa 34-a 35-aaa 36-aaaa 37-a 38-a 39-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 54-a 55-a 56-aaaaa 57-aa 58-a 59-a 60-a 61-aa 62-a 63-a 64-a 65- aa 66-aaaa 67-aa 68-aa 69-aa 70-a 71-a 72-a 73-a 74-a 75-aa 76-aa 77-aa 78-aaa 79-a 80-aaa 81-aa 82 -aa 83-aa 84-a 85-a 86-a 87-aa 88-aa 89-aaaa 90-a 91-aaa 92-aaa 93-aa 94-aa 95-a 96-aaa 97-a 98-a 99-aaaa

您可以看到最长的出现是12个字符长。问题出在哪里?

ppwpp 回答:票价/齐格

似乎Xeger在每个步骤中随机选择可能的转换,然后将与该转换匹配的字符串附加到结果中。对于您的正则表达式,一旦匹配的字符串具有1 a,就有两个可能的过渡:“添加另一个a”或“字符串结尾”。

我们可以认为这是掷硬币:

  • heads =添加另一个a
  • tails =字符串结尾

为了说出一串100 a的结果,这就像掷硬币并连续获得100个头-这是非常不可能的事情。如您所见,a的字符串越长,发生的可能性就越小!

本文链接:https://www.f2er.com/3125767.html

大家都在问