【问题标题】:Why doesn't this lua pattern match remove the '.xml' including the .?为什么这个 lua 模式匹配不删除 '.xml' 包括 .?
【发布时间】:2020-08-20 16:56:35
【问题描述】:
function getXMLBaseFileName(filename)
  try = filename:match("^(.+)\.xml$")
  if try == nil then
      return filename
  else
      return try
  end
end

当给定一个像“foo.xml”这样的文件名时,我将返回“foo”。所以包括点,但它在 () 对之外。

【问题讨论】:

  • 您的代码在我尝试时完全失败:invalid escape sequence near '\.'
  • 当任何字符都可以转义时,OP 可能正在使用 Lua 5.1;如果没有意义,则忽略转义。这在 Lua 5.2+ 中发生了变化。

标签: lua lua-patterns


【解决方案1】:

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

【讨论】:

  • 愚蠢的我。这就是您同时使用 3 种语言工作时所获得的结果。
【解决方案2】:
function getXMLBaseFileName(filename)
   return (filename:gsub("%.xml$", ""))
   -- www.lua.org/manual/5.3/manual.html#pdf-string.gsub
end

print(getXMLBaseFileName('foo.xml'))

:)

【讨论】:

  • 虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
  • @ArdentCoder 除了gsub 函数的文档之外,我几乎没有什么可以添加的,可以在参考手册中轻松阅读。
  • 这出现在低质量的帖子中,由于您的代表,我不建议删除,我知道您会积极接受评论。所以我指导你改进这篇文章;也许您可以在答案中添加指向您正在谈论的参考的链接。
猜你喜欢
  • 2012-09-17
  • 1970-01-01
  • 2020-09-18
  • 2013-05-11
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 2012-07-26
  • 2018-03-01
相关资源
最近更新 更多