Вопрос по луа / поиск строки

1удди

Новичок
Автор темы
18
2
Привет!
Нужна помощь. Хотелось бы узнать, как из появившейся в чате строки получить нужное значение.
К примеру, в чате появляется строка: Администратор Admin_Istrator[666] выпустил игрока Some_Player[852] из деморгана.
Из этой строки нужно получить ник администратора и его ID, а также ник игрока и его ID.

Еще пример. В чате появляется строка: Администратор Admin_Istrator[666] посадил игрока Some_Player[852] в деморган на 60 минут.
Отсюда то же самое, что из первого примера, но еще нужно получить время, на которое игрока посадили.

Спасибо!
 
  • Нравится
Реакции: Gat
Решение
Привет!
Нужна помощь. Хотелось бы узнать, как из появившейся в чате строки получить нужное значение.
К примеру, в чате появляется строка: Администратор Admin_Istrator[666] выпустил игрока Some_Player[852] из деморгана.
Из этой строки нужно получить ник администратора и его ID, а также ник игрока и его ID.

Еще пример. В чате появляется строка: Администратор Admin_Istrator[666] посадил игрока Some_Player[852] в деморган на 60 минут.
Отсюда то же самое, что из первого примера, но еще нужно получить время, на которое игрока посадили.

Спасибо!
Получать через регулярку
Регулярка для "Администратор Admin_Istrator[666] выпустил игрока Some_Player[852] из деморгана. "
Код:
if text:find("Администратор% (%w+.%w+)%[(%d+)%]% выпустил...

McLore

Известный
559
279
Привет!
Нужна помощь. Хотелось бы узнать, как из появившейся в чате строки получить нужное значение.
К примеру, в чате появляется строка: Администратор Admin_Istrator[666] выпустил игрока Some_Player[852] из деморгана.
Из этой строки нужно получить ник администратора и его ID, а также ник игрока и его ID.

Еще пример. В чате появляется строка: Администратор Admin_Istrator[666] посадил игрока Some_Player[852] в деморган на 60 минут.
Отсюда то же самое, что из первого примера, но еще нужно получить время, на которое игрока посадили.

Спасибо!
Получать через регулярку
Регулярка для "Администратор Admin_Istrator[666] выпустил игрока Some_Player[852] из деморгана. "
Код:
if text:find("Администратор% (%w+.%w+)%[(%d+)%]% выпустил игрока% (%w+.%w+)%[(%d+)%]%из %деморгана.") then
local nickadm, admid,nick,id = text:match("Администратор% (%w+.%w+)%[(%d+)%]% выпустил игрока% (%w+.%w+)%[(%d+)%]%из %деморгана.")
end
Ну и по такому же аналогу делаешь для 2
Тока потести,возможно где то накосячил =)
 
Последнее редактирование:
  • Нравится
Реакции: 1удди

1удди

Новичок
Автор темы
18
2
К
Получать через регулярку
Регулярка для "Администратор Admin_Istrator[666] выпустил игрока Some_Player[852] из деморгана. "
Код:
if text:find("Администратор% (%w+.%w+)%[(%d+)%]% выпустил игрока% (%w+.%w+)%[(%d+)%]%из %деморгана.") then
local nickadm, admid,nick,id = text:match("Администратор% (%w+.%w+)%[(%d+)%]% выпустил игрока% (%w+.%w+)%[(%d+)%]%из %деморгана.")
end
Ну и по такому же аналогу делаешь для 2
Тока потести,возможно где то накосячил =)
Так каждое слово должно обособляться знаком процента?) Или как это работает? Не понятна мне эта тема :)
А так, спасибо большое, буду пробовать
 

McLore

Известный
559
279
К

Так каждое слово должно обособляться знаком процента?) Или как это работает? Не понятна мне эта тема :)
А так, спасибо большое, буду пробовать
Посмотри в гугле там есть гайды по регулярным выражения
Для проверки своей регулярки можешь использовать https://regex101.com/
Тока там нужно использовать / вместо %
 
  • Нравится
Реакции: 1удди

Gat

Участник
52
6
Посмотри в гугле там есть гайды по регулярным выражения
Для проверки своей регулярки можешь использовать https://regex101.com/
Тока там нужно использовать / вместо %
Смотри, я сделал такое регулярное выражение:
Lua:
if text:find(' Администратор% (%w+.%w+)%[(%d+)%]% забанил игрока% (%w+.%w+)%[(%d+)%]% на% (%d+)% дней.% Причина:% (.+)') then
        local admnick, admid, plnick, plid, days, prichina = text:match(' Администратор% (%w+.%w+)%[(%d+)%]% забанил игрока% (%w+.%w+)%[(%d+)%]% на% (%d+)% дней.% Причина:% (.+)')
end
для такой строки: Администратор Some_Adm[234] забанил игрока Some_Plyr[902] на 13 дней. Причина: чит
Но оно почему-то не работает, я что-то неправильно делаю?
 

Quasper

Известный
834
354
Так каждое слово должно обособляться знаком процента?) Или как это работает? Не понятна мне эта тема :)
знак процента используется для экранирования зарезервированных языком спецсимволов таких как:
$ - конец строки, ^ - начало строки и прочих, тобишь те символы которые могут встретиться в строке по которой проходишься регуляркой.
А так ставить перед каждым словом это нецелесообразно
Смотри, я сделал такое регулярное выражение:
Lua:
if text:find(' Администратор% (%w+.%w+)%[(%d+)%]% забанил игрока% (%w+.%w+)%[(%d+)%]% на% (%d+)% дней.% Причина:% (.+)') then
        local admnick, admid, plnick, plid, days, prichina = text:match(' Администратор% (%w+.%w+)%[(%d+)%]% забанил игрока% (%w+.%w+)%[(%d+)%]% на% (%d+)% дней.% Причина:% (.+)')
end
для такой строки: Администратор Some_Adm[234] забанил игрока Some_Plyr[902] на 13 дней. Причина: чит
Но оно почему-то не работает, я что-то неправильно делаю?
Lua:
local admnick, admid, plnick, plid, days, prichina = text:match('Администратор%s+(.+)%[(%d+)%].+игрока%s+(.+)%[(%d+)%]%s+на%s+(%d+)%s+дней%.%s+Причина%:%s+(.+)$')
 
Последнее редактирование:
  • Нравится
Реакции: Gat