Lua字符串匹配(Corona SDK)

3

我正在尝试从服务器响应中提取授权码,如下所示:

GET /?state=authenticated&code=U946s9lHouBGWy8o45bXSRSXGzTqd0Ys HTTP/1.1

我正在使用lua/Corona;

string.match(request, "GET /?state=authenticated&code=([%w--_/.=?]+)")

我收到了无响应的nil,并不知道出了什么问题...有人知道或者有更好的想法吗?

wkr,

-sean


1
认证码是否总是只有字母和数字?如果是的话,似乎可以使用更简单的正则表达式。 - Hunter McMillen
我想是这样。实际上,我不理解正则表达式,并从另一个示例中获取了该片段,但该示例确实执行了我要做的确切操作。非常感谢任何帮助。我猜我可以使用anchorsearch或类似的东西。我也是Lua的新手,所以不确定工具箱中有什么。提前致谢Hunter。 - user2467301
request:match'&code=(%S+)' - Egor Skriptunoff
2个回答

2
单独使用字符?时,它会作为模式修饰符。这就是为什么你会得到nil的结果。请使用%对其进行转义。
str = "GET /?state=authenticated&code=U946s9lHouBGWy8o45bXSRSXGzTqd0Ys HTTP/1.1"

print( str:match("GET /%?state=(%w+)&code=(%w+)") )

这里是工作输出:https://eval.in/33065


编辑

这里是另一个例子,与之前不同的是没有转义?字符。这只是为了阐述我的观点。:)


非常感谢hjpotter92,你做得很好。有什么建议可以让我学习现在正在做的事情吗? :) - user2467301
Lua使用模式而不是普通的正则表达式。您可以使用Lua-Users wiki或在#lua channel on irc上提出一些基本问题。 - hjpotter92
模式被仔细描述在Lua参考手册中,并在Programming in Lua一书的大部分章节中详细讨论。它们非常强大,但不如其他地方找到的正则表达式工具完整。 - RBerteig

1

Try to use this:

string.match(request, "GET /%?state=authenticated&code=([^ ]+)")

谢谢!我已尝试:local code = string.match(request, "GET /?state=authenticated&code=([^ ]+)") - user2467301
但是它返回的代码为空。我猜我一定做错了其他事情。 - user2467301
@user2467301:看我的编辑。我没有转义问号。 - Casimir et Hippolyte
1
  1. [^ ] 不等同于 %S
  2. 感谢使用 EDI。
- Casimir et Hippolyte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接