Помогите составить регулярку

CaJlaT

Овощ
Автор темы
Модератор
2,824
2,652
Версия MoonLoader
.026-beta
Помогиье составить регулярку...
В общем, есть информация об игроке, ip реги, настоящй ip и бла-бла-бла, мне нужно оттуда выудить текст
{FF0000}Рулетка: {FFFFFF}-30 787 260$Посмотреть вложение 49877
И как можно понять, минуса может не быть, а так же кол-во денег может быть от овер 1ккк, до овер -1ккк.
Вот что у меня получилось:

Lua:
local textik = {}
        if text:find('-(%d+) (%d+) (%d+)') then
            textik[1], textik[2], textik[3] = text:match('-(%d+) (%d.) (%d+)')
            print('1st') -- для удобности, чтобы знать в какой регулярке ошибка
            print('{00FFFF}'.. tag ..'-'.. textik[1] ..".".. textik[2] ..'kk')
        elseif text:find('- (%d+) (%d+) (%d+)') then
            textik[1], textik[2], textik[3] = text:match('- (%d+) (%d.) (%d+)')
            print('2nd')
            print('{00FFFF}'.. tag ..'-'.. textik[1] ..".".. textik[2] ..'kk')
        elseif text:find('-(%d+) (%d+)') then
            textik[1], textik[2] = text:match('-(%d+) (%d.)')
            print('3rd')
            print('{00FFFF}'.. tag ..'-'.. textik[1] ..".".. textik[2] ..'k')
        elseif text:find('- (%d+) (%d+)') then
            textik[1], textik[2] = text:match('- (%d+) (%d.)')
            print('4st')
            print('{00FFFF}'.. tag ..'-'.. textik[1] ..".".. textik[2] ..'k')
        elseif text:find('- (%d+)') then
            _, textik[1], textik[2] = text:match('Рулетка:(%s+)%{FFFFFF%}- (%d+)')
            print('5st')
            print('{00FFFF}'.. tag ..'-'.. textik[1] ..'$')
        elseif text:find('Рулетка:(%s+)%{FFFFFF%}-(%d+)') then
            _, textik[1] = text:match('Рулетка:(%s+)%{FFFFFF%}-(%d+)')
            print('6st')
            print('{00FFFF}'.. tag ..'-'.. textik[1] ..'$')
        elseif text:find('Рулетка:(%s+)%{FFFFFF%}(%d+) (%d+) (%d+)') then
            _, textik[1], textik[2], textik[3] = text:match('Рулетка:(%s+)%{FFFFFF%}(%d+) (%d.) (%d+)')
            print('7st')
            print('{00FFFF}'.. tag .. textik[1] ..".".. textik[2] ..'kk')
        elseif text:find('Рулетка:(%s+)%{FFFFFF%}(%d+) (%d+)') then
            _, textik[1], textik[2] = text:match('Рулетка:(%s+)%{FFFFFF%}(%d+) (%d.)')
            print('8st')
            print('{00FFFF}'.. tag .. textik[1] ..".".. textik[2] ..'k')
        elseif text:find('Рулетка:(%s+)%{FFFFFF%}(%d+)') then
            _, textik[1], _ = text:match('Рулетка:(%s+)%{FFFFFF%}(%d+)%$(.+)')
            print('9st')
            print('{00FFFF}'.. tag .. textik[1] ..'$')
        end
Но когда скрипт проверяет по первой регулярке, выдаёт ошибку и крашит скрипт:

Log:
[16:34:22.974773] (script)    pinfo.lua: 1st
[16:34:22.974773] (error)    pinfo.lua: E:\winter gta\moonloader\pinfo.lua:42: attempt to concatenate a nil value
stack traceback:
    E:\winter gta\moonloader\pinfo.lua:42: in function 'callback'
    E:\winter gta\moonloader\lib\samp\events\core.lua:77: in function 'process_event'
    E:\winter gta\moonloader\lib\samp\events\core.lua:100: in function 'process_packet'
    E:\winter gta\moonloader\lib\samp\events\core.lua:127: in function <E:\winter gta\moonloader\lib\samp\events\core.lua:126>
[16:34:22.982773] (error)    pinfo.lua: Script died due to an error. (169DE38C)
Вроде кое-как составил регулярки на минусы, но вот с плюсами беда...
Ещё по какой-то причине не работает sampSendDialogResponse
Lua:
function samp.onShowDialog(id,s,t,b1,b2,text)
    if id == 999 and pm == true then
        sampSendDialogResponse(999, 1, _, _)
        pm = false
        local textik = {}
        if text:find('-(%d+) (%d+) (%d+)') then
            textik[1], textik[2], textik[3], _ = text:match('-(%d+) (%d.)')
            print('1st')
            print('{00FFFF}'.. tag ..'-'.. textik[1] ..".".. textik[2] ..'kk')
            lua_thread.create(function ()
                wait(1000)
                sampSendChat('/pm '.. pid .. ' -' .. textik[1] ..'.'.. textik[2] ..'kk')
            end)
        elseif text:find('- (%d+) (%d+) (%d+)') then
            textik[1], textik[2], textik[3] = text:match('- (%d+) (%d.) (%d+)')
            print('2nd')
            print('{00FFFF}'.. tag ..'-'.. textik[1] ..".".. textik[2] ..'kk')
            lua_thread.create(function ()
                wait(1000)
                sampSendChat('/pm '.. pid .. ' -' .. textik[1] ..'.'.. textik[2] ..'kk')
            end)
        elseif text:find('-(%d+) (%d+)') then
            textik[1], textik[2] = text:match('-(%d+) (%d.)')
            print('3rd')
            print('{00FFFF}'.. tag ..'-'.. textik[1] ..".".. textik[2] ..'k')
            lua_thread.create(function ()
                wait(1000)
                sampSendChat('/pm '.. pid .. ' -' .. textik[1] ..'.'.. textik[2] ..'k')
            end)
        elseif text:find('- (%d+) (%d+)') then
            textik[1], textik[2] = text:match('- (%d+) (%d.)')
            print('4st')
            print('{00FFFF}'.. tag ..'-'.. textik[1] ..".".. textik[2] ..'k')
            lua_thread.create(function ()
                wait(1000)
                sampSendChat('/pm '.. pid .. ' -' .. textik[1] ..'.'.. textik[2] ..'k')
            end)
        elseif text:find('- (%d+)') then
            _, textik[1], textik[2] = text:match('Рулетка:(%s+)%{FFFFFF%}- (%d+)')
            print('5st')
            print('{00FFFF}'.. tag ..'-'.. textik[1] ..'$')
            lua_thread.create(function ()
                wait(1000)
                sampSendChat('/pm '.. pid .. ' -' .. textik[1] ..'$')
            end)
        elseif text:find('-(%d+)') then
            _, textik[1], textik[2] = text:match('Рулетка:(%s+)%{FFFFFF%}-(%d+)')
            print('6st')
            print('{00FFFF}'.. tag ..'-'.. textik[1] ..'$')
            lua_thread.create(function ()
                wait(1000)
                sampSendChat('/pm '.. pid .. ' -' .. textik[1] ..'$')
            end)
        elseif text:find('Рулетка:(%s+)%{FFFFFF%}-(%d+)') then
            _, textik[1] = text:match('Рулетка:(%s+)%{FFFFFF%}-(%d+)')
            print('7st')
            print('{00FFFF}'.. tag ..'-'.. textik[1] ..'$')
            lua_thread.create(function ()
                wait(1000)
                sampSendChat('/pm '.. pid .. ' -' .. textik[1] ..'$')
            end)
        elseif text:find('Рулетка:(%s+)%{FFFFFF%}(%d+) (%d+) (%d+)') then
            _, textik[1], textik[2], textik[3] = text:match('Рулетка:(%s+)%{FFFFFF%}(%d+) (%d.) (%d+)')
            print('8st')
            print('{00FFFF}'.. tag .. textik[1] ..".".. textik[2] ..'kk')
            lua_thread.create(function ()
                wait(1000)
                sampSendChat('/pm '.. pid .. ' ' .. textik[1] ..".".. textik[2] ..'kk')
            end)
        elseif text:find('(%d+) (%d+)%$') then
            textik[1], textik[2] = text:match('(%d+) (%d.)')
            print('9st')
            print('{00FFFF}'.. tag .. textik[1] ..".".. textik[2] ..'k')
            lua_thread.create(function ()
                wait(1000)
                sampSendChat('/pm '.. pid .. ' ' .. textik[1] ..".".. textik[2] ..'k')
            end)
        elseif text:find('Рулетка:(%s+)%{FFFFFF%}(%d+)') then
            _, textik[1], _ = text:match('Рулетка:(%s+)%{FFFFFF%}(%d+)%$(.+)')
            print('10st')
            print('{00FFFF}'.. tag .. textik[1] ..'$')
            lua_thread.create(function ()
                wait(1000)
                sampSendChat('/pm '.. pid .. ' ' .. textik[1] ..'$')
            end)
        end
    end
end

Log:
[14:51:03.784766] (script)    pinfo.lua: 9st
[14:51:03.784766] (error)    pinfo.lua: E:\winter gta\moonloader\pinfo.lua:105: attempt to concatenate a nil value
stack traceback:
    E:\winter gta\moonloader\pinfo.lua:105: in function 'callback'
    E:\winter gta\moonloader\lib\samp\events\core.lua:77: in function 'process_event'
    E:\winter gta\moonloader\lib\samp\events\core.lua:100: in function 'process_packet'
    E:\winter gta\moonloader\lib\samp\events\core.lua:127: in function <E:\winter gta\moonloader\lib\samp\events\core.lua:126>
[14:51:03.791766] (error)    pinfo.lua: Script died due to an error. (1636254C)
Решил при помощи разбивки текста на строки, если кому-то интересно, то вот:
{AFAFAF}IP: {FFFFFF}secret
{AFAFAF}Рег. IP: {FFFFFF}secret

{FF0000}XP за час: {FFFFFF}secret XP
{FF0000}Денег за час: {FFFFFF}secret$
{FF0000}XP от клана за час: {FFFFFFsecret XP
{FF0000}Рулетка: {FFFFFF}secret$
{FF0000}Разбанов доступно: {FFFFFF}secret
И вот сама разбивка на строки:

Lua:
local str = {}
str[1], str[2], str[3], str[4], str[5], str[6], str[7] = text:match('%{AFAFAF%}(.+)%{AFAFAF%}(.+)%{FF0000%}(.+)%{FF0000%}(.+)%{FF0000%}(.+)%{FF0000%}(.+)%{FF0000%}(.+)')
print(str[6])-- в этом случае  выводит нужную мне строку, а именно - Рулетка:         {FFFFFF}secret$
 
Последнее редактирование: