Lua 模式 - 为什么自定义集“[+-_]”匹配字母数字字符?

Lua patterns - why does custom set '[+-_]' match alphanumeric characters?

我今天尝试使用一些模式来尝试匹配字符串中的某些特定字符,运行 变成一些不寻常的东西,我希望有人能解释一下。

我创建了一个集合来寻找一些字符串中的字符列表,并注意到我得到了一些意想不到的结果。我把剧集中的人物都删掉了,只剩三个了,好像是这三个人负责:

string = "alpha.5dc1704B40bc7f.beta.123456789.gamma.987654321.delta.abc123ABC321"

result = ""
for a in string.gmatch(string, '[+-_]') do 
result = result .. a .. " "
end

> print(result)
. 5 1 7 0 4 B 4 0 7 . . 1 2 3 4 5 6 7 8 9 . . 9 8 7 6 5 4 3 2 1 . . 1 2 3 A B C 3 2 1

为什么这些字符在这里 returned(看起来像任何数字或大写字母,加上点)?我注意到如果我改变集合的顺序,我不会得到相同的输出 - '[_+-]' or '[-_+]' or '[+_-]' or '[-+_]' all return 不出所料。

'[+-_]' 是什么导致了这里的匹配?我不明白我在说什么 lua 被解释为匹配这些字符的指令。

- 位于方括号内的其他字符之间时,表示这两者之间的所有内容。例如,[a-z]是全部小写字母,[A-F]是A、B、C、D、E、F。[+-_]表示+之间的所有ASCII字符和 _,其中包括所有数字、所有大写字母和大量标点符号。