假设 a*b 是我的搜索表达式。当它应用于目标文本 aaaaaabbc 和 1345536 时会发生什么?
使用aaaaaabbc,它开始尝试匹配第一个字符 (an a),发现可以匹配,然后继续运行,直到到达第一个b。在这一点上它停止,宣布成功。(某些语言默认为正则表达式添加隐式的全字符串锚定,但通常可以匹配任何地方。)
使用1345536,它尝试匹配第一个字符,发现它不能(它既不是a也不是b),因此继续尝试从第二个字符开始。由于它永远找不到可以开始匹配的点,因此整个字符串不匹配。
让我们也考虑一下aaac(一个您没有使用过但仍然提供信息的案例);尽管状态机找到了a并开始尝试匹配,但由于它从未找到强制 b的,它实际上从未完成匹配并且字符串不匹配。
我说它必须适用于第二个的原因是这个。应该有零个或多个a,并且有零个a。随着它的继续,它的字母用完了, b 将没有机会与之进行比较。所以这不是比赛吗?
那是我无法得到的,b 如何以及何时获得机会?
为了a*b匹配任何东西,它必须有一个零个或多个as 的运行,然后是一个强制的b。是的,as 是可选的,但b不是;它必须存在才能找到匹配项。里面没有b;1345536它永远不会匹配。RE 引擎将寻找 aa或 ab开始;两者都可以。如果找到 a a,它将开始尝试在as 上进行匹配扫描,直到b达到 a(匹配)或达到非b(和非a)(非匹配)。如果找到的第一个字符是b; 立即找到匹配项。
简而言之,你有点误解了什么a*b意思。的可选性a与b.