首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Fare/Xeger发出多次事件

使用Fare/Xeger发出多次事件
EN

Stack Overflow用户
提问于 2019-11-11 08:02:00
回答 1查看 183关注 0票数 0

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

regex字符串“a{1,000}”应该匹配长度在1到5000字符之间的"a“序列。与类Xeger使用相同的regex字符串应该生成长度在1到5000字符之间的字符串序列。

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

代码语言:javascript
复制
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个字符长。问题在哪里?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-11 09:11:13

看起来,Xeger是在每个步骤中随机选择可能的转换,然后在结果中追加匹配该转换的字符串。对于正则表达式,一旦匹配的字符串有1 a,就有两个可能允许的转换:“添加另一个a”或“string的结束”。

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

  • heads =添加另一个
  • = string

结束

为了得到一个100 a的字符串作为结果,这将是像抛硬币和得到100个头连续-一个非常不可能的事件。如您所见,a的字符串越长,发生的可能性就越小!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58797532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档