kaka888 10 Опубликовано: 14 января, 2019 В луа можно обрезать строку? Например мне нужно читать сообщения из чата с помощью чат-бокса, искать в сообщении плохие слова и выдавать куда-то уже сообщения без плохих слов. В библиотеке string ничего не нашёл(( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 15 января, 2019 string.gsub, безусловно. Забудь про какие-то жутчайшие костыли с string.find и прочим. Гсаб тут просто рулит и педали от пола не отрывает. Он может поменять одно слово на другое. string.gsub("abc", "a", "d") == "dbc" Он может поменять один паттерн на что-то другое. string.gsub("hello world", "%w+", [["%1"]]) == [["hello" "world"]] Он может поменять один паттерн на табличное значение. local greek = { l = "λ", o = "ο", g = "γ", i = "ι", k = "κ", e = "ή", } string.gsub([[logic derives from Ancient Greek $l$o$g$i$k$e]], "$(%w+)", greek) == "logic derives from Ancient Greek λογική" И самое крутое: он может менять один паттерн по функции, вызывая её для каждого матча. string.gsub([[breaking news: title case considered stupid]], "(%w)(%w*)", function(head, tail) return head:upper() .. tail end) == [[Breaking News: Title Case Considered Stupid]] Читайте подробнее вот где-то тут. 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st 88 Опубликовано: 14 января, 2019 (изменено) string.find возвращает 2 величины - начало искомой подстроки и конец. Т.е. ты можешь получить начало слова и его конец, а затем обрезать с помощью unicode.sub(строка_для_обрезки,начало,конец). string.sub лучше для строк с юникодом не использовать. Пример кода - https://ideone.com/tEZHqh Что делает код выше со строкой str: 1.Ищет в строке подстроку "badWord" и получает положение ее начала и конца с помощью string.find(строка_в_которой_ищем,строка_которую_ищем) 2. Обрезает строку до первой буквы слова с помощью string.sub(строка_для_обрезки,начало,конец) 3. Обрезает строку от последней буквы слова с помощью string.sub(строка_для_обрезки,начало) (конец можно опустить - тогда он станет равен -1, т.е. до самого конца строки) 4. Конкатекует две строки, получая строку без слова badWord В данном случае надо будет делать это в цикле, пока string.find не вернет nil, и переходить к следующему "запрещенному" слову. P.s. возможно много информации. Отвечаю кратко - тебе нужен string.sub (s, i [, j]), где s - строка для обрезки, i - начало, j - конец. UPD: Не подумав написал. Можно использовать string.gsub(строка_из_которой_удалить,слово_которое_удалить,на_что_заменить), хотя при некоторой доработке можно с помощью алгоритма выше сделать складывание "запрещенных" слов в отдельную строку/таблицу, чего gsub не позволяет. Изменено 14 января, 2019 пользователем HeroBrine1st UPD 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kaka888 Автор вопроса 10 Опубликовано: 17 января, 2019 (изменено) Благодарю. Жаль, что я пока не знаю, что такое паттерн, "%" и "$" :(( Изменено 17 января, 2019 пользователем kaka888 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 17 января, 2019 17 минут назад, kaka888 сказал: Благодарю. Жаль, что я пока не знаю, что такое паттерн, "%" и "$" :(( Паттерны, они же шаблоны. Они же аналог "регексов" для Луа. Вот тут про паттерны на английском: http://lua-users.org/wiki/PatternsTutorial Тут - на русском: http://bot4sale.ru/blog-menu/qlua/265-lua-patterns.html Ну и вообще погуглить можно. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kaka888 Автор вопроса 10 Опубликовано: 17 января, 2019 Спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
В луа можно обрезать строку?
Например мне нужно читать сообщения из чата с помощью чат-бокса, искать в сообщении плохие слова и выдавать куда-то уже сообщения без плохих слов. В библиотеке string ничего не нашёл((
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах