проблема с регуляркой скорее всего, хелп

boy next door

Участник
Автор темы
258
23
Версия MoonLoader
.026-beta
здарова всем. вроде всё делаю правильно, но выводит мне первый r-ip вместо ip. что не так?
Lua:
        if text:find("R%-IP %[%d+.%d+.%d+.%d+%]  IP %[%d+.%d+.%d+.%d+%]") then
            local rip = text:match("R%-IP %[(%d+%.%d+%.%d+%.%d+)%]")
            local ip = text:match("IP %[(%d+%.%d+%.%d+%.%d+)%]")
            if ip then
                lua_thread.create(function()
                    wait(700)
                    sampAddChatMessage(rip, -1)
                    sampAddChatMessage(ip, -1)
                end)
            end
        end
 
Решение
Проблема в вашем коде связана с тем, что оба шаблона для match могут находить одно и то же значение, и Lua находит первое совпадение.
Вот исправленный вариант:

Lua:
if text:find("R%-IP %[%d+.%d+.%d+.%d+%]  IP %[%d+.%d+.%d+.%d+%]") then
    local rip, ip = text:match("R%-IP %[(%d+%.%d+%.%d+%.%d+)%].-IP %[(%d+%.%d+%.%d+%.%d+)%]")
    if ip then
        lua_thread.create(function()
            wait(700)
            sampAddChatMessage(rip, -1)
            sampAddChatMessage(ip, -1)
        end)
    end
end

verdis

Участник
15
2
Проблема в вашем коде связана с тем, что оба шаблона для match могут находить одно и то же значение, и Lua находит первое совпадение.
Вот исправленный вариант:

Lua:
if text:find("R%-IP %[%d+.%d+.%d+.%d+%]  IP %[%d+.%d+.%d+.%d+%]") then
    local rip, ip = text:match("R%-IP %[(%d+%.%d+%.%d+%.%d+)%].-IP %[(%d+%.%d+%.%d+%.%d+)%]")
    if ip then
        lua_thread.create(function()
            wait(700)
            sampAddChatMessage(rip, -1)
            sampAddChatMessage(ip, -1)
        end)
    end
end
 

kyrtion

Известный
1,126
407
Можно указать как целое)) %S-
Lua:
local pattern = 'R%-IP %[(%S-)%]%s+IP %[(%S-)%]'
-- %S - чекает на наличие символа, но без пробела (%s)
-- %s - чекает на наличие пробелов (включая табуляция, перенос строка и прочее %c)
-- Справочник: https://umodel.narod.ru/webhelp/ams/Program_Reference/Actions/RegExp_Lua.htm
-- Для всех классов, представляемых одиночными символами (%a, %c, и т.п.),
-- соответствующая прописная буква представляет отрицание класса.
-- Например, %S представляет все НЕ пробельные символы.

-- onServerMessage? maybe onShowDialog?
if text:find(pattern) then
    local rip, ip = text:match(pattern)
    if ip then
        lua_thread.create(function()
            wait(1)
            sampAddChatMessage(rip, -1)
            sampAddChatMessage(ip, -1)
        end)
    end
end