regex - lua中的正则表达式模式问题
问题描述
我有一个 URL 字符串,需要从匹配项中获取某个单词。
例子:
/school/student/studentname1/detail/55/address/address1
我可以通过来获取所需的详细信息,例如,
local s1,s2,s3 =myString:match("/school/student/(.-)/detail/(.-)/address/(.-)")
现在的问题是我的字符串可以
myString = /school/student/studentname1
或者
myString = /school/student/studentname1/detail/55
在那种情况下,我的正则表达式失败了,有什么帮助吗?
解决方案
local all_fields = { student = 1, detail = 2, address = 3 }
local function parse(str)
local info = {}
local index
for w in str:gmatch"/([^/]+)" do
if index then
info[index] = w
index = nil
else
index = all_fields[w]
end
end
return (table.unpack or unpack)(info, 1, 3)
end
local myString = '/school/student/studentname1/detail/55/address/address1'
local s1, s2, s3 = parse(myString)
print(s1, s2, s3)
myString = '/school/student/studentname1/address/address1'
s1, s2, s3 = parse(myString)
print(s1, s2, s3)
myString = '/school/student/studentname1/detail/55'
s1, s2, s3 = parse(myString)
print(s1, s2, s3)
推荐阅读
- botframework - 对 MS Graph 进行身份验证时出现 400 错误请求
- php - 使用 php 修改/更改文本文档中的行
- javascript - 我如何模拟从 chrome 扩展到浏览器页面生成的“警报”或“确认”的操作
- java - 在android中迭代json对象
- javascript - Ignoring body in a JavaScript fetch response
- angular - 带有步骤数组的 Angular Stepper 表单数据
- java - 为什么 cookie 没有在浏览器中设置,但在 POSTMAN 中设置?
- typescript - 为什么分配给先前键入的变量会更改其类型?
- python - 如何从字节中保存和重新加载 spacy Docs
- php - 将 3 个表的结果与 MAX(date) 结合起来