Lua-使用模式获取子字符串的首次出现

时间:2019-01-20 14:09:28

标签: string design-patterns lua substring match

我有一个看起来像这样的字符串:

local str = "rootFolder\\<subFolder>\\<...>\\nFolder\\fileName";

其中<...>可能是其他文件夹名称的列表,从而使路径/字符串很长。另外,我不知道实际上会调用什么<subFolder>,因为文件夹名称可以是任何东西,即:

  • rootFolder\\folderA\\...
  • rootFolder\\folderB\\...
  • rootFolder\\folderC\\...
  • ...

我们可以假设我知道根文件夹的名称,因为在运行时会知道它的名称,因此现在让我们假设它的名称为rootFolder

如何使用与<subFolder>匹配的模式提取子字符串str

我在想类似的东西:

string.match(str, "rootFolder\\(.*)\\.*");捕获文件夹/目录层次结构中rootFolder下的第一个folderName并忽略其后的其他任何内容,但这是行不通的,因为尽管它确实匹配,但它也获取了它之后的所有其他内容,但不只是我需要的部分(我也尝试使用.+而不是.*)。

例如,我希望能够做到这一点:

local str = "rootFolder\\hello\\anotherFolder\\myFile";
-- this pattern does not work as expected:
local folderName = string.match(str, "rootFolder\\(.*)\\.*"); 
print(folderName == "hello"); -- true

希望如此。谢谢。

1 个答案:

答案 0 :(得分:1)

答案是使用减号:

local folderName = string.match(str, "rootFolder\\(.-)\\");