String 在Lua中,如何从长字符串中解析出http(s)字符串?

String 在Lua中,如何从长字符串中解析出http(s)字符串?,string,lua,string-parsing,String,Lua,String Parsing,如果我有一个字符串,例如 这是一个网站,位于 http://www.abc.com/post_id?id=123&key=456,请访问它并让我 知道。谢谢 如何在Lua中解析此字符串,以便获得三个子字符串: 字符串1-http(s)url之前的文本 字符串2-http(s)url本身(带所有参数) 字符串3-http(s)url后的文本 请注意,“http”前面可能没有空格。谢谢。最简单的模式是:(.+)%s+(https?%s+)%s+(.*)$ 它会给你: 缺点是,您将获得包含,字符的UR

如果我有一个字符串,例如

这是一个网站,位于
http://www.abc.com/post_id?id=123&key=456
,请访问它并让我 知道。谢谢

如何在Lua中解析此字符串,以便获得三个子字符串:

字符串1-http(s)url之前的文本

字符串2-http(s)url本身(带所有参数)

字符串3-http(s)url后的文本


请注意,“http”前面可能没有空格。谢谢。

最简单的模式是:
(.+)%s+(https?%s+)%s+(.*)$

它会给你:

缺点是,您将获得包含
字符的URL



中间部分带有
(https?%S+
)可以控制URL参数。如果您认为字符串中可以包含单词http,请将其修改为:
(https?://%S+
和类似的其他可能性。

非常感谢。它工作得很好。但是还有一个问题,如果字符串包含多个http URL,它将返回sLink中的最后一个http URL。如何让它在sLink中返回第一个http URL?(2)还有第二个问题,如果“http”前面没有空格怎么办?我要解析的大多数字符串在“http”之前没有空格。。。请帮忙。谢谢,我不是雷格克斯老板。你可以在sPost中循环,直到没有更多的链接。将sLink添加到表?@JoeHuang,要提取第一个URL,请使用
(.-)
而不是
(.+)
@lhf-第二个也允许
s
是可选的,因此匹配
https
http
:-)
local str = "This is a website, it is at http://www.abc.com/post_id?id=123&key=456, please visit it and let me know. Thanks"
local sPre, sLink, sPost = str:match( "(.+)%s+(https?%S+)%s+(.*)$" )