我尝试在其中解析带有http URL的字符串,例如,字符串就像
str = "http://www.abc.com?id=123&key=456 and more text here"
我想知道http url链接的结束位置,基本上我使用
string.find(str, "......")
我可以在那里添加什么模式,以便它会考虑URL结束?
答案 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不包含未编码的空格,这样可以轻松找到它的结尾。