1

我尝试解析一个带有http URL的字符串,例如,字符串就像

str = "http://www.abc.com?id=123&key=456 and more text here"

我想知道http url链接在哪里结束,基本上我用

string.find(str, "......")

我可以在那里放置什么模式,以便它考虑 URL 结束?

4

2 回答 2

1

匹配 url 的一个简单模式是:
pattern = "https?://[%w-_%.%?%.:/%+=&]+"
string.find(str, pattern)
这只是一个需要改进才能在所有情况下工作的起点 - 如何在其他语言的字符串中查找 URL 的问题是一个很好的提示(例如,在字符串中查找 URL 的正则表达式) . http://www.lua.org/pil/20.2.html也很有用。

另请注意,url 中允许使用括号,例如: http: //msdn.microsoft.com/en-us/library/aa752574 (VS.85).aspx 。

于 2013-08-19T13:31:14.667 回答
1

我想知道http url链接在哪里结束

它在空格处结束,所以只需找到所有不是空格的内容:

str:find('%S+')

仅供参考,如果您只是想提取字符串的那部分,您应该match改用:

str:match('%S+')

编辑:根据下面的讨论添加说明。

请注意,我们不是在此处尝试解析 URL。我们正在解析以空格分隔的字符串中的标记。

我们必须假设 URL 不包含未编码的空格,否则 URL 可能是以下任何一种,我们无法区分它们:

http://www.abc.com?id=123&key=456
http://www.abc.com?id=123&key=456 and
http://www.abc.com?id=123&key=456 and more
http://www.abc.com?id=123&key=456 and more text
http://www.abc.com?id=123&key=456 and more text here

同样,URL 存在于单词由空格分隔的句子中,因此我们必须假设/要求 URL 不包含未编码的空格,这样可以很容易地找到它的结尾。

于 2013-08-19T16:43:03.397 回答