为什么这个string.find失败?

问题描述 投票:0回答:1
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 lua
1个回答
12
投票

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
匹配。

© www.soinside.com 2019 - 2024. All rights reserved.