Lua subpattern соответствия странности - PullRequest
1 голос
/ 05 августа 2011

У меня есть две части кода, которые разбивают строку на основе шаблонов.

Первый:

local test = "whop^1whap^2whup"
local pattern = "%^[12]"
local lastpos = 1

for startpos, endpos in string.gmatch( test, "()"..pattern.."()" ) do


   print("pos: "..startpos..","..endpos)
   print("str: "..string.sub(test,lastpos,startpos-1))
   print("match: "..string.sub(test,startpos,endpos-1))

   lastpos = endpos

end

Этот разбивает строку вокруг ^ 1 или ^ 2.Он выводит:

pos: 5,7
str: whop
match: ^1
pos: 11,13
str: whap
match: ^2

Вторая версия такова:

local test = "whop^t1whap^02whup"
local pattern = "%^[(t1)(02)]"
local lastpos = 1

for startpos, endpos in string.gmatch( test, "()"..pattern.."()" ) do


   print("pos: "..startpos..","..endpos)
   print("str: "..string.sub(test,lastpos,startpos-1))
   print("match: "..string.sub(test,startpos,endpos-1))

   lastpos = endpos

end

Эта версия ПРЕДПОЛАГАЕТСЯ разбить строку в ^ t1 или ^ 02.Вместо этого я получаю это:

pos: 5,7
str: whop
match: ^t
pos: 12,14
str: 1whap
match: ^0

Я заметил, что первая позиция (5,7) точно такая же, как в первом фрагменте кода, даже если длина шаблона должна быть 3 символа.

Что я делаю не так?

1 Ответ

4 голосов
/ 05 августа 2011

Шаблоны Lua не являются регулярными выражениями. Например, шаблон [(t1)(02)] не означает «соответствовать строкам« t1 »или« 02 »». Это означает «соответствовать символам» (',' t ',' 1 ',' 0 ',' 2 'или') '". Отсутствие подобных функций в шаблонах Lua делает их намного проще для реализации (и, следовательно, уменьшает стандартную библиотеку Lua).

Вы достигли пределов способности разбора шаблонов Lua. Если вам нужны регулярные выражения, я предлагаю вам скачать модуль Lua, который их реализует.

...