Шаблон Lua для соответствия пути

Я хотел бы взять строку, представляющую путь к файлу, удалить имя файла и сохранить только путь.

Например, если у меня есть:

"/folder1/folder2/file.name"

Я хочу, чтобы в моей строке было "/folder1/folder2/".

Я играл с string.match(), как описано здесь: http://lua-users.org/wiki/StringLibraryTutorial

У меня такой код:

mystring = "/var/log/test.log"
print(string.match(mystring, "%/"))

Когда я запускаю этот сценарий, я получаю только символ '/'. Я ожидал, что он вернет позиции двух '/' в строке. Я также пробовал заменить образец "%/" только на "/", но это дает те же результаты.

Я уверен, что мне не хватает чего-то очень простого, но я не понимаю, что это такое.


person dot    schedule 29.01.2014    source источник


Ответы (2)


По шаблону %/ или / вы говорите string.match искать строку /, и это то, что у вас есть. Попробуйте с этим:

local mystring = "/var/log/test.log"
print(string.match(mystring, ".+/"))

Здесь шаблон .+/ означает поиск одного или нескольких любых символов (.), за которыми следует /. + означает, что это жадно, т. Е. Совпадать как можно дольше.

person Yu Hao    schedule 29.01.2014
comment
Не нужно убегать /. - person lhf; 29.01.2014
comment
@lhf Исправлено, иногда забывала, что это за магические символы. Но экранирование / тоже работает, и это одна из причин, почему мне нравится Lua. - person Yu Hao; 29.01.2014
comment
не работает с escape-последовательностями в пути. - person dualed; 30.01.2014

Попробуйте любой из этих вариантов:

local mystring = "/var/log/test.log"
print(mystring:gsub('([%w+]+%.%w+)$',''))

вывод: / var / log /

local mystring = "/var/log/test.log"
print(mystring:match('^(/.+/)'))

вывод: / var / log /

Или тоже простая функция

    function anystring(string)
       local string = string:match('^(/.+/)')
       if anystring then
          return string
       else
          return false
       end
    end

local mystring = anystring('/var/log/test.log')

print(mystring)

вывод: / var / log /

Вы можете быть как можно более конкретными при размещении шаблона, чтобы избежать ошибок кода.

person Webrom    schedule 13.05.2018