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

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

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

怎么在Lua中解析这个字符串,以便我得到三个子字符串:
String 1 - http(s) URL之前的文本
String 2 - http(s) URL本身(包括所有参数)
String 3 - http(s) URL之后的文本
请注意,在"http"之前可能没有空格。谢谢!
1个回答

3
最简单的模式将是:(.+)%s+(https?%S+)%s+(.*)$
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+(.*)$" )

这将会给你一个链接:https://eval.in/43745

缺点是,你的URL将包含,字符。


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


非常感谢。它运行得很好。但是还有一个问题,如果字符串包含多个http URL,则会在sLink中返回最后一个http URL。如何使其返回sLink中的第一个http URL而不是最后一个? - Joe Huang
还有一个问题,如果在“http”之前没有空格怎么办?我想解析的大多数字符串在“http”之前都没有空格...请帮忙。谢谢。 - Joe Huang
1
@JoeHuang,要提取第一个URL,请使用(.-)而不是(.+) - lhf
@JoeHuang 这里有另一个 eval.in 示例,展示如何捕获多个链接。 - hjpotter92
1
@lhf - 第二个也允许s是可选的,因此匹配httpshttp两者 :-) - Egor Skriptunoff
显示剩余4条评论

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