Я люблю Lua. I love Lua.

Регулярные выражения

Posted in Uncategorized by ilovelua on Сентябрь 22, 2011

Понадобилось сделать следующее:

есть список файлов, некоторые из которых содержат признак локализации — знак подчеркивания и две буквы локализации перед расширением файла, например:

default.lua
default_de.lua
default_fr.lua

Нужно отрезать от имени файла расширение с точкой и, если есть, признак локализации. В итоге я сделал так:

  local newFile = string.gsub(file, '(.lua)$', '')
  newFile = string.gsub(newFile, '(_%a%a)$', '')

А есть путь короче? Что-то у меня со всякими string.find(), string.match() ничего не получилось.

Реклама

комментариев 5

Subscribe to comments with RSS.

  1. Valery said, on Сентябрь 29, 2011 at 2:54 пп

    Раз уж тебя угораздило заняться регулярными выражениями, то лучше сразу обратиться к супер-пупер мощному LPEG и не париться со штатными паттернами Lua. Небось не зря LPEG сам Роберто написал.

  2. ilovelua said, on Сентябрь 30, 2011 at 4:45 дп

    Я темный, про LPEG ничего даже не слыхал :(…

    • Valery said, on Сентябрь 30, 2011 at 10:25 дп

      Вот пример решения с использованием модуля re из LPEG. Подразумевается, что конструкция «.lua» обязательно присутствует, причем в конце строки. Обработку ошибок опускаем, как это широко распространено в узких кругах ) Наверняка можно еще как-то развить и упростить, но лень )

      require «re»

      p = «(‘_’ %a^2 ‘.lua’) / ‘.lua'»

      fname = «default_en.lua»
      i = re.find(fname, p)
      print(string.sub(fname, 1, i-1)) —> default

      fname = «default.lua»
      i = re.find(fname, p)
      print(string.sub(fname, 1, i-1)) —> default

      fname = «default_en.soft_ru.lua»
      i = re.find(fname, p)
      print(string.sub(fname, 1, i-1)) —> default_en.soft

      • Valery said, on Сентябрь 30, 2011 at 1:54 пп

        Более простой паттерн для данного примера работает тоже:

        p = «(‘_’ %a^2)? ‘.lua'»

  3. Valery said, on Сентябрь 30, 2011 at 9:11 дп

    Вот это поможет въехать в тему:
    http://www.gammon.com.au/forum/?id=8683


Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: