Lua gsub - Как установить максимальный лимит символов в шаблоне регулярных выражений - PullRequest
0 голосов
/ 18 ноября 2018

Из строк, которые подобны этой строке:

|cff00ccffkey:|r value

Мне нужно удалить | cff00ccff и | r, чтобы получить:

key: value

Проблема в том, что |cff00ccff - это цветной код.Я знаю, что это всегда начинается с |c, но следующие 8 символов могут быть чем угодно.Поэтому мне нужен шаблон gsub для получения следующих 8 символов (только буквенно-цифровой) после |c.

Как я могу сделать это в Lua?Я пробовал:

local newString = string.gsub("|cff00ccffkey:|r value", "|c%w*", "")
newString = string.gsub(newString, "|r", "")

, но это удалит все до первого пробела, и я не знаю, как указать максимальное количество символов для выбора, чтобы избежать этого.

Спасибовы.

1 Ответ

0 голосов
/ 18 ноября 2018

паттерны Lua не поддерживают квантификаторы диапазона / интервала / ограничения.

Вы можете повторить %w буквенно-цифровой шаблон восемь раз:

local newString = string.gsub("|cff00ccffkey:|r value", "|c%w%w%w%w%w%w%w%w", "")
newString = string.gsub(newString, "|r", "")
print(newString)
-- => key: value

См. Демо Lua онлайн .

Вы также можете сделать его немного более динамичным, если создадите шаблон как ('%w'):.rep(8):

local newString = string.gsub("|cff00ccffkey:|r value", "|c" ..('%w'):rep(8), "")

См. еще одно демо Lua .

Если ваши строки всегда следуют этому шаблону - |c<8alpnum_chars><text>|r<value> - вы также можете использовать шаблон как

local newString = string.gsub("|cff00ccffkey:|r value", "^|c" ..('%w'):rep(8) .. "(.-)|r(.*)", "%1%2")

См. это демо Lua

Здесь образец соответствует:

  • ^ - начало строки
  • |c - литерал |c
  • " ..('%w'):rep(8) .. " - 8 буквенно-цифровых символов
  • (.-) - Группа 1: любые 0+ символов, как можно меньше
  • |r - подстрока |r
  • (.*) - Группа 2: остаток строки.

%1 и %2 относятся к значениям, включенным в соответствующие группы.

...