Обикновено използвам две променливи, за да съхраня резултата от нещо подобно:
a = {'alarm boy car dentist','alarm car dentist elephant','alarm dentist elephant fabulous','alarm elephant fabulous goat'}
k, v = string.match(a[1], 'alarm dentist (%w+) (%w+)' )
print(k, v)
elephant fabulous
но вместо да използвам две променливи, бих искал да го съхраня в масив или таблица.
Крайната ми цел е да създам функция, в която въвеждам масив (който в този случай е 'a') и шаблон (който в този случай е 'аларма зъболекар (%w+) (%w+)') и че тя връща желана/и придружаваща/и дума/и, ако е намерена, или 'нула' в противен случай. Уловката е, че броят думи, които моделът търси, е недефиниран. В този случай е 2, но искам потребителят да може да въвежда произволен шаблон, т.е. „аларма зъболекар (%w+) (%w+) (%w+) (%w+)“ или „аларма зъболекар (%w+)“.
Така че това беше моят ред на мисли досега: (Използвам инструмента за команден ред в Ubuntu 12.04LTS, за да го тествам)
a = {'alarm boy car dentist','alarm car dentist elephant','alarm dentist elephant fabulous','alarm elephant fabulous goat'}
function parse_strings (array, pattern)
words = nil
for i=1, #array do
c = string.match(array[i], pattern)
if c ~= nil then
words = c
end
end
return words
end
print (parse_strings (a, 'alarm dentist (%w+) (%w+)'))
elephant
но само първата стойност се съхранява в "c" вместо c[1]='elephant' и c[2]='fabulous'.
В най-лошия случай бих могъл да потърся колко думи търси моделът, но все пак ще трябва да намеря начин да съхраня изхода с недефиниран размер от string.match
в един масив.