【问题标题】:Extract last part of a string in Lua在 Lua 中提取字符串的最后一部分
【发布时间】:2017-05-23 10:06:42
【问题描述】:

我需要像这样提取字符串的最后一部分,

http://development.dest/show/images-345/name/289/

我只需要这部分289,我尝试将string.match 与下一个模式一起使用。

string.match(url, "(%d+)(\/)$")

我在错误日志中得到了这个错误,

2017/05/22 20:53:04 [error] 31264#0: *5 failed to load external Lua file

我认为模式的最后一部分是错误的,但我不知道如何修复它 ((\/))。

【问题讨论】:

  • 你需要括号而不是括号,它们创建一个字符类,括号用于捕获。另外,我添加了与斜杠的 0 或 1 匹配的问号,因为它可能存在或不存在。 "(%d+)[\/]?$" 是你想要的。是否可以记录或打印捕获结果?这样会更容易诊断。

标签: lua


【解决方案1】:

来自 Lua 的错误信息是

invalid escape sequence near '"(%d+)(\/'

这表示\/ 不是 Lua 字符串中的有效转义序列。

下面更简单的模式可以正常工作:

print(string.match(url, "(%d+)/$"))

如果最后的斜线是可选的,请使用

print(string.match(url, "(%d+)/?$"))

【讨论】:

  • 如果最后的斜线是可选的,模式会是怎样的?
【解决方案2】:

使用LuaSocket 处理网址。通过这种方式,您还可以轻松解析出协议、查询等,而无需经历正则表达式地狱。

local url = assert(require"socket.url")

local parsed_url = url.parse"http://development.dest/show/images-345/name/289/"
local path       = url.parse_path(parsed_url.path)

print(path[#path])

【讨论】:

  • Lua 模式(不是正则表达式)使用起来很愉快!
猜你喜欢
  • 2022-09-24
  • 1970-01-01
  • 2017-12-28
  • 2012-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
相关资源
最近更新 更多