在Lua中,如何找到URL的结尾?

时间:2013-08-19 09:53:50

标签: string parsing url lua lua-patterns

我尝试在其中解析带有http URL的字符串,例如,字符串就像

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

我想知道http url链接的结束位置,基本上我使用

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

我可以在那里添加什么模式,以便它会考虑URL结束?

2 个答案:

答案 0 :(得分:1)

匹配网址的简单模式是:
pattern = "https?://[%w-_%.%?%.:/%+=&]+"
string.find(str, pattern)
这只是一个需要改进以适用于所有情况的起点 - 如何在字符串中查找其他语言的URL是一个很好的提示(例如Regular expression to find URLs within a string)。 http://www.lua.org/pil/20.2.html也很有用。

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

答案 1 :(得分:1)

  

我想知道http网址链接的结束位置

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

str:find('%S+')

仅供参考,如果你只想提取字符串的那一部分,你应该使用match代替:

str:match('%S+')

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

请注意,我们尝试在此处解析网址。我们用空格分隔的字符串解析标记。

我们假设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不包含未编码的空格,这样可以轻松找到它的结尾。