我逐步解析 / \ 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”}。所以它可以追溯到一个角色 此外,因为它有第二种可能性,它有可能 什么都不匹配等等。
感谢。