Сегодня я играл с некоторыми шаблонами, чтобы попытаться сопоставить некоторые определенные символы в строке, и наткнулся на что-то необычное, что, надеюсь, кто-то сможет объяснить.
Я создал набор для поиска списка символов в некоторых строках и заметил, что получаю неожиданные результаты. Я исключил персонажей из набора, пока не остановился до трех, и, похоже, именно эти трое ответственны:
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
Почему здесь возвращаются эти символы (выглядит как любая цифра или заглавная буква плюс точки)? Замечу, что если я изменю порядок набора, я не получу тот же результат - '[_+-]'
, '[-_+]'
, '[+_-]'
или '[-+_]'
, все ничего не вернут, как и ожидалось.
Что такого '[+-_]'
, что здесь вызывает совпадение? Я не могу понять, что я говорю lua, что интерпретируется как инструкции для сопоставления этих символов.