为什么这个Lua模式不匹配去掉'.xml',包括 . 在内?

function getXMLBaseFileName(filename)
  try = filename:match("^(.+)\.xml$")
  if try == nil then
      return filename
  else
      return try
  end
end

当给出一个文件名"foo.xml"时,我会返回"foo.",因此包括它在括号之外。

点赞
用户734069
用户734069

因为 \. 不是有效的 Lua 字符串转义序列, 所以您发布的代码无法编译。您尝试不正确地转义了 . 字符; 您需要使用 pattern 转义,而不是 Lua 字符串转义。具体来说,是 "^(.+)%.xml$"。一旦您这样做了,您的代码就可以正常工作。

2020-05-05 21:18:48
用户4984564
用户4984564
函数 getXMLBaseFileName(filename)
   返回 (filename:gsub("%.xml$", ""))
   -- www.lua.org/manual/5.3/manual.html#pdf-string.gsub
end

print(getXMLBaseFileName('foo.xml'))

功能:获取 XML 文件的基本文件名。

实现方式:将文件名中最后的 .xml 替换成空字符串。

示例输出:foo

2020-05-06 07:36:42