string.find("MOZ-MAIL-1-1","MOZ-MAIL-")
string.find("MOZ-MAIL-1-1","OZ-MAIL-")
鉴于上述情况,为什么这些返回 false,但以下成功?
string.find("MOZ-MAIL-1-1","Z-MAIL-")
string.find
默认使用模式。 -
是模式中的特殊字符:它被解释为“零个或多个前面的字符(类),惰性匹配”。
要让 Lua 将
-
解释为模式中的文字 -
,请使用 %
将其转义:string.find("MOZ-MAIL-1-1","MOZ%-MAIL%-")
有效。
另一种方法 - 如果你的“needle”是一个变量,这会特别方便 - 是传递一个起始位置,并通过传递第四个参数来告诉 Lua 将needle解释为文字字符串
plain = true
:string.find("MOZ-MAIL-1-1","MOZ-MAIL-", 1, true)
也可以工作.
string.find("MOZ-MAIL-1-1","Z-MAIL-")
因巧合而成功:在这种情况下它与 MAI
匹配:Z-
与零个 Z
匹配,L-
与零个 L
匹配。