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字符和 _
,其中包括所有数字、所有大写字母和大量标点符号。
我今天尝试使用一些模式来尝试匹配字符串中的某些特定字符,运行 变成一些不寻常的东西,我希望有人能解释一下。
我创建了一个集合来寻找一些字符串中的字符列表,并注意到我得到了一些意想不到的结果。我把剧集中的人物都删掉了,只剩三个了,好像是这三个人负责:
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字符和 _
,其中包括所有数字、所有大写字母和大量标点符号。