Как заменить текст регулярки

Fasmin

Участник
Автор темы
160
4
Версия MoonLoader
.026-beta
Lua:
function ev.onServerMessage(color, text)
    local buy = string.match(text, "Вы купили (.+)")
    if buy ~= nil then
        sampAddChatMessage(buy, -1)
    end
end

Получается так: Вы купили Какойто Предмет
Но мне нужно, из этого кода сделать, чтобы выходило так: Вы купили КакойтоПредмет
То есть без пробелов, как это сделать? Я не понимаю
 

chromiusj

Известный
Модератор
5,600
3,903
Lua:
function ev.onServerMessage(color, text)
    local buy = text:match("Вы купили (.+)"):gsub(' ','')
    if buy then
        sampAddChatMessage(buy, -1)
    end
end
1706808921468.png
1706808925345.png
 

Fasmin

Участник
Автор темы
160
4
Lua:
function ev.onServerMessage(color, text)
    local buy = text:match("Вы купили (.+)"):gsub(' ','')
    if buy then
        sampAddChatMessage(buy, -1)
    end
end
Посмотреть вложение 230799Посмотреть вложение 230800
1706815776551.png


Мне надо от входящего текста, там где Вы купили (.+), вместо регулярки должен быть любой текст

Не рабоает крч
 
Последнее редактирование:

kyrtion

Известный
908
321

recxvery

Участник
93
28
Вы купили Ларец организации (1 шт.) у игрока File_Zila за $125,000
так?

Lua:
local sampev = require 'lib.samp.events'

function sampev.onServerMessage(color, text)
    local buy = text:match('^Вы купили (.+) %(%d+ шт.%) у игрока %w+_%w+ за .+'):gsub('', ' ')
    if buy then
        sampAddChatMessage(buy, -1)
    end
end
 

Fasmin

Участник
Автор темы
160
4
так?

Lua:
local sampev = require 'lib.samp.events'

function sampev.onServerMessage(color, text)
    local buy = text:match('^Вы купили (.+) %(%d+ шт.%) у игрока %w+_%w+ за .+'):gsub('', ' ')
    if buy then
        sampAddChatMessage(buy, -1)
    end
end
Нет, мне нужно первые два-3 слова, чтобы были без пробелов, т.е после слова организации ничего не шло
А еще вылазит ошибка
attempt to index a nil value
 

kyrtion

Известный
908
321
Нет, мне нужно первые два-3 слова, чтобы были без пробелов, т.е после слова организации ничего не шло
А еще вылазит ошибка
attempt to index a nil value
ты попробуй поиграть https://onecompiler.com/lua
указываешь допустим

local color = -1
local text = 'Вы купили ...'

а снизу уже указываешь для получение из текста

чтоб ты ломал и дальше писал код, снова ломал и писал. главное чтоб получил и совпадало - затем его реализуешь


Lua:
local sf = string.format

local color = -1
local text = 'Вы купили Ларец организации (1 шт.) у игрока File_Zila за $125,000'

if text:find('^Вы купили .- %(%d+ шт%.%) у игрока .- за .+$') then
    local product, count, nickname, price = text:match('^Вы купили (.-) %((%d+) шт%.%) у игрока (.-) за (.+)$')
    print(sf('Product: [%s]\nCount: [%s]\nNickname: [%s]\nPrice: [%s]', product, count, nickname, price))
end
--[[
Product: [Ларец организации]
Count: [1]
Nickname: [File_Zila]
Price: [$125,000]
]]
 
Последнее редактирование:
  • Нравится
Реакции: recxvery

Fasmin

Участник
Автор темы
160
4
ты попробуй поиграть https://onecompiler.com/lua
указываешь допустим

local color = -1
local text = 'Вы купили ...'

а снизу уже указываешь для получение из текста

чтоб ты ломал и дальше писал код, снова ломал и писал. главное чтоб получил и совпадало - затем его реализуешь


Lua:
local sf = string.format

local color = -1
local text = 'Вы купили Ларец организации (1 шт.) у игрока File_Zila за $125,000'

if text:find('^Вы купили .- %(%d+ шт%.%) у игрока .- за .+$') then
    local product, count, nickname, price = text:match('^Вы купили (.-) %((%d+) шт%.%) у игрока (.-) за (.+)$')
    print(sf('Product: [%s]\nCount: [%s]\nNickname: [%s]\nPrice: [%s]', product, count, nickname, price))
end
--[[
Product: [Ларец организации]
Count: [1]
Nickname: [File_Zila]
Price: [$125,000]
]]
Мне нужно, чтобы текст был без пробелов. Потому что когда я это отправляю в вк, он не дает сделать текст с пробелами
req.get(u8("https://api.vk.com/method/messages.send?user_id=513347678&random_id=0&message=текст!&access_token="..token.."&v=5.131"))
 

Fott

Простреленный
3,461
2,374
Мне нужно, чтобы текст был без пробелов. Потому что когда я это отправляю в вк, он не дает сделать текст с пробелами
req.get(u8("https://api.vk.com/method/messages.send?user_id=513347678&random_id=0&message=текст!&access_token="..token.."&v=5.131"))
Ну так пробелы в тексте заменяй на %20. Ты не подумал как люди отправляют пробелы? И вообще используй urlencode

Lua:
function urlencode(str)
   if (str) then
      str = string.gsub (str, "\n", "\r\n")
      str = string.gsub (str, "([^%w ])",
         function (c) return string.format ("%%%02X", string.byte(c)) end)
      str = string.gsub (str, " ", "+")
   end
   return str
end