"()"
. Такое впечатление, что скопировано из string без учёта двухбайтовых символов.Как воспроизвести:
lua:=string.match('ab', '.*b()')
(== string.len('ab')+1)lua:=('ab'):match('.*b()')
(== ('ab'):len()+1)lua:=unicode.utf8.match('ab', '.*b()')
(==unicode.utf8.len('ab')+1)все три выражения возвращают 3, что правильно. Теперь заменим однобайтовый символ на двухбайтовый:
lua:=string.match('яb', '.*()b')
(== string.len('яb')+1 - неправильно, но ожидаемо)lua:=('яb'):match('.*()b')
(~= ('яb'):len()+1 !!! Ошибка!!!)lua:=unicode.utf8.match('яb', '.*()b')
(~=unicode.utf8.len('яb')+1 Явная ошибка!!!)Все три возвращают 4. Ну, string.match - понятно, там и string.len() работает неправильно (байты считает). Но вот два последних выражения, судя по тому, что len() работает верно, должны возвращать тоже двойку. Позиция в строке не должна зависеть от количества байт на символ. Ну или другими словами, если len() отрабатывает такую ситуацию правильно, то и match должна работать так же.
Может, я чего-то не понимаю в логике работы функций из unicode.utf8? Тогда объясните мне, почему результат одной функции (len) не совпадает с результатом другой (match).