Перейти к содержанию
  • записи
    104
  • комментариев
    125
  • просмотров
    15 625

Регулярки на Lua. Пронумеровать список строк


MasterGH

1 106 просмотров

В общем хорошо взялся за регулярки на Lua!  Всё подряд прогоняю через них, что под руку попадется, любые задачи.

 

Случайный пример задачи. Пронумеровать список

Скрытый текст
Цитата

string
string.byte
string.char
string.dump
string.find
string.format
string.gmatch
string.gsub
string.len
string.lower
string.match
string.pack
string.packsize
string.rep
string.reverse
string.sub
string.unpack
string.upper

 

 

Тут же написал

 

Скрытый текст

local text = [[
string
string.byte
string.char
string.dump
string.find
string.format
string.gmatch
string.gsub
string.len
string.lower
string.match
string.pack
string.packsize
string.rep
string.reverse
string.sub
string.unpack
string.upper
]]

function EnumerateText(text)
  local count = 0
  local rez = text:gsub('%C+', function (s)
   count = count + 1
   return string.format('%s. %s', count, s)
  end)

  showMessage(rez)
  writeToClipboard(rez)
end

EnumerateText(text)

 

 

И получил ответ. В следующий раз только вызывать "EnumerateText([[ текст со строками]])"

Скрытый текст
Цитата

1. string
2. string.byte
3. string.char
4. string.dump
5. string.find
6. string.format
7. string.gmatch
8. string.gsub
9. string.len
10. string.lower
11. string.match
12. string.pack
13. string.packsize
14. string.rep
15. string.reverse
16. string.sub
17. string.unpack
18. string.upper

 

 

Тут в буфер текст улетит и выведет в мессагу. После закрытия мессаги через CTRL+V вставит текст, куда хотим

Пронумерованные функции — функции работы со строками последней версии Lua 5.3.x из документации

 

На что стоит обратить внимание при регулярках:

1. Работа с пробелами и не пробелами: "%s" и "%S"

2. Работа с символами разделяющие строки и не разделяющими строки: "%с" и "%С"

3. Захват строк "(.+)", "(.-)", "(.*)", а также без захвата, т.е. пропуск других символов ".+",".-",".*"

4. Узнать как и какая функция из выше перечисленных работает, какая используется с регуляторами.

 

Хотим к примеру вывести слово, которое закончится на пробеле (пишу просто "на пробеле" без учета других символов). Это уже "(%w+)", а если хотим второе слово, то это "%W+%w+" (не выводить первое и вывести второе слово) или "%s(%w+)" (после пробела, но чтобы было без пробела, то захватить в круглые скобки), или "^.+%s(%w+)"(начинать с первого символа до пробела и захват до конца слова).

 

Если писать на CE Lua, то регулярки знать не обязательно. Но, их желательно знать, чтобы читать чужой код и писать свой. Да и вообще это интересно. Очень короткие выражения позволяют решить некоторую задачу за быстрое время. Основные задачи: поиск текста и замена текста.

0 Комментариев


Рекомендуемые комментарии

Комментариев нет

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.