Я пытаюсь получить данные из чата игры, но не могу понять закономерность.
Это дополнение для World of Warcraft Vanilla (частный сервер).
Функция gsub:
http://wowprogramming.com/docs/api/gsub < br> http://wowwiki.wikia.com/wiki/API_gsub
Я хорошо справился с этим объяснением, но теперь есть часть, где у меня есть что-то вроде это:
variable = gsub(string, "([%d+d]+)?...", "")
Я не знаю, каким должен быть шаблон, поскольку строка может быть похожа на один из следующих примеров:
2d17h6m31s
1d8h31m40s
22h40m4s
8h6m57s
5m25s
37s
"([%d+d]+)?"
- это на самом деле несколько моих попыток, соединенных вместе.
Я читал о магических символах ( ) . % + - * ? [ ^ $
, но кое-что мне все еще непонятно. Было бы здорово, если бы я мог получить простое объяснение в резюме!
Важная часть того, как выглядит чат:
Изменить (комментарий ktb):
Вопрос: как взять полный 99d23h59m59s (^(.*s)
не помогло)?
В 99d23h59m59s
99
может быть от 1 до 99, и сразу после него всегда стоит d
, но это необязательно, есть ли на самом деле <number>d
или нет. Затем то же самое с <number>h
(диапазон номеров от 1 до 24), <number>m
(диапазон номеров от 1 до 59). Всегда в конце есть ago
.
Обновлять:
/run for key in pairs(string)do ChatFrame1:AddMessage(key)end
С помощью этой команды я получил имена всех функций string.functionName()
, вот список:
string.dump ()
Обновление информации:
В отличие от нескольких других языков сценариев, Lua не использует регулярные выражения POSIX (regexp) для сопоставления с образцом. Основная причина этого - размер: типичная реализация регулярного выражения POSIX занимает более 4000 строк кода. Это больше, чем все стандартные библиотеки Lua вместе взятые. Для сравнения: реализация сопоставления с образцом в Lua содержит менее 500 строк. Конечно, сопоставление с образцом в Lua не может делать всего того, что делает полная реализация POSIX. Тем не менее сопоставление с образцом в Lua является мощным инструментом и включает некоторые функции, которые трудно сопоставить со стандартными реализациями POSIX.
В отличие от некоторых других систем, в Lua модификатор может применяться только к классу символов; нет возможности группировать паттерны под модификатором. Например, нет шаблона, который соответствует необязательному слову (если слово не состоит только из одной буквы). Обычно вы можете обойти это ограничение, используя некоторые из продвинутых методов, которые мы увидим позже.
Я не могу найти продвинутые техники, описанные в приведенной выше цитате. Я нашел только это, в котором я еще не уверен.
s ago
, так почему бы не сопоставить это?"^(.*s) ago"
. Также вы можете использоватьmatch
вместоgsub
. Если вам нужно регулярное выражение для разделения строк на поля, переформатируйте свой вопрос, и я дам правильный ответ. - person ktb   schedule 11.02.2017match
работает с игрой, я пробовал некоторые строковые функции, и единственные, которые я нашел работающими, былиgsub
иstrfind
. Если вы считаете, что это должно работать, дайте мне имя функции, потому что я не думаю, что соответствует работает. - person user7393973   schedule 11.02.2017gsub
на самом деле является псевдонимом дляstring.gsub
, а такжеstrmatch
является псевдонимом дляstring.match
, функции, о которой я имел в виду. И я считаю, что вам может потребоваться отредактировать свой вопрос, чтобы точно объяснить, что вы хотите сопоставить с этими строками. Из вашего примера я делаю вывод, что вы пытаетесь сопоставить дневную часть строки? - person ktb   schedule 11.02.2017