正确解释引擎如何使用贪婪的正则表达式扫描给定的字符串(DFA,NFA)

时间:2014-10-08 18:00:43

标签: regex string regex-greedy dfa nfa

我逐步解析 / \ w + s / / \ w * s / 正则表达式为“我们采取文盲问题”串 用于Regex定向引擎(NFA)和文本定向引擎(DFA)。

过去三周我一直在寻找正确的解释 我的老师给了我以下解释引擎如何解析这个字符串。这是对的吗(对于NFA)?

/ \ w + s /
“我们提出了一些文盲问题”

  

引擎从头开始,它说,我有一个W {in   “我们”}。这是一个单词字符。这很好。

     

引擎转到e - 它仍然是一个单词字符。

     

引擎很贪婪,所以它仍然试图消耗这些引擎   第一个表达中的东西,即字符。

     

然后它到达了空间,它说没关系,这不是一个字   字符,这不是一个s,所以它两个测试都失败了;因此   没有成功。

     

此时它回溯到e。然后它说,让我们试试这个   可能性:如果这是第一个表达式怎么办?

     

第一个表达式匹配 - 它是一个单词字符 - 所以然后它   去了。仍然没有。

     

所以现在又看起来了,它说,好吧,空间也不是   单词字符或s,然后它移动到t。 {in“take”}

     

尝试t。它说,这是一个单词字符,a是一个单词,the   k和e。当它最终到达太空时,它说,这不是一个   字符。

     

现在让我们转到表达式的第二部分,即s,   它也不是。

     

现在我们回溯到a。 {in“take”}我们尝试了t,所以现在我们   回到a。现在我们再试一次。

     

引擎沿着表达式的第一部分移动直到它   到了空间,它说这不是一个单词字符   检查并说,它也不是,所以现在它回溯到   k。 {in“take”}

     

它再次在那里开始同样的事情,直到它到达空间,   然后它回溯到e,依此类推。

     

然后当它到达e {in“illiteratE”}和空间时,它   意识到这没有成功,然后它的工作方式到q   {in“questions”},当然它沿着a移动直到它   到达s,这是有效的,我们有一个匹配。

/ \ W * S /
“我们提出了一些文盲问题”

  

让我们继续前进,直到工作文盲。

     

默认情况下,明星也很贪婪,所以它会想要消费   尽可能多的单词字符。所以它将开始,它是   要做与之前版本完全相同的事情。

     

但这就是区别。

     

它到达最后一个角色然后说,好吧,这不是一个字   这个角色并不是s。

     

这次它回溯到i {in“illiterate”},因为有一个   星号的第二种可能性,这是它的可能性   什么都不匹配。

     

如果我{in“illiterate”}不是什么?如果相反我会怎么样   采取懒惰的策略,让它为零,然后检查下一个   性格,看看是否会是一个?

     

不是,所以失败了。

     

所以现在它不需要回溯。它尝试了两种策略   我{在“文盲”}:它尝试了贪婪的策略和懒惰   策略。

     

现在它说,好吧,让我们从l {in“iLliterate”}开始。

     

是一个单词角色吗?

     

是的。它向前移动并返回并且几乎可以工作   和加号一样。

     

但是,这次它会回到第一个{在“iLliterate”}   第二个l {in“ilLiterate”}。所以它可以追溯到一个角色   此外,因为它有第二种可能性,它有可能   什么都不匹配等等。

感谢。

0 个答案:

没有答案