今晚在这个房子周围消失了。我想做的就是在以下脚本中提取csrf-token,但它会返回nil
local html = '<meta content="authenticity_token" name="csrf-param" /><meta content="ndcZ+Vp8MuM/hF6LizdrvJqgcRh22zF8w/DnIX0DvR0=" name="csrf-token" />'
local csrf_token = string.match(html, 'content="(.*)" name="csrf-token"')
如果我修改脚本并取消“-token”部分,它会匹配某些东西,但当然不是正确的。
我知道这是连字符,因为如果我将字符串修改为“csrftoken”并且找到的匹配按预期工作。
我试图逃避 - 如此\-
,但是却犯了错误......
... ELP
答案 0 :(得分:2)
有两个问题:
-
确实需要转义,但Lua使用%
代替\
。
此外,你得到奇怪的东西的原因是.
可以匹配任何东西,包括跨标签(或属性),并尽可能多地尝试(因为引擎将返回最左边可能的匹配,ungreedy量词也无济于事。你应该做的是限制允许的字符,以便捕获的东西不能超出属性引号 - 如[^"]
(除引号之外的任何字符):
将所有这些结合在一起:
local csrf_token = string.match(html, 'content="([^"]*)" name="csrf%-token"')
无论如何,you shouldn't actually be matching HTML with regular expressions。
答案 1 :(得分:0)
name="csrf-token'"
这一行末尾有一个额外的撇号。
我也会逃避“=和连字符,虽然这可能不是所有这些字符所必需的。