无法匹配Lua中的csrf-token

时间:2013-06-11 20:58:15

标签: regex lua

今晚在这个房子周围消失了。我想做的就是在以下脚本中提取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

2 个答案:

答案 0 :(得分:2)

有两个问题:

  1. -确实需要转义,但Lua使用%代替\

  2. 此外,你得到奇怪的东西的原因是.可以匹配任何东西,包括跨标签(或属性),并尽可能多地尝试(因为引擎将返回最左边可能的匹配,ungreedy量词也无济于事。你应该做的是限制允许的字符,以便捕获的东西不能超出属性引号 - 如[^"](除引号之外的任何字符):

  3. 将所有这些结合在一起:

    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'"

这一行末尾有一个额外的撇号。

我也会逃避“=和连字符,虽然这可能不是所有这些字符所必需的。