【问题标题】:In Lua, how to find the end of an URL?在 Lua 中,如何找到 URL 的结尾?
【发布时间】:2013-08-21 01:56:32
【问题描述】:

我尝试解析一个带有http URL的字符串,例如,字符串是这样的

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

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

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

我可以在其中放置什么模式,以便考虑 URL 结束?

【问题讨论】:

  • 您在给出的示例中寻求的答案是什么?
  • 给出的精确语法是w3.org/Addressing/URL/5_URI_BNF.html
  • 我用string.find(str, "[^$-_+!*',%a%d:/.]"),对吗?但是它仍然将“)”视为 URL 的一部分似乎很奇怪......例如,str="http://abc)de.com"“)”被认为是 URL 的一部分(我期待 http://abc 被解析出来)

标签: string parsing url lua lua-patterns


【解决方案1】:

匹配 url 的简单模式是:
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 中允许使用括号,例如:http://msdn.microsoft.com/en-us/library/aa752574(VS.85).aspx

【讨论】:

    【解决方案2】:

    我想知道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 不包含未编码的空格,这样可以很容易地找到它的结尾。

    【讨论】:

    • 有人编辑了我的问题,所以我的字符串被切断了。现在我编辑回来了。请注意“str”。 URL 后面有一些文本,因此我要问的是 URL 的结束位置,以便我可以将 URL 和它后面的文本分开。
    • 我现在用这个:string.find(str, "[^%%%@%;%=%&%?%$%-%_%+%!%*%'%, %a%d%:%/%.]"),你怎么看?
    • 抓住空格前的所有内容:str:find('%S+')(我将更新我的帖子以反映这些新信息)
    • 除了空格之外,URL 结束时还需要考虑更多字符,或者空格是唯一可能的结束字符?
    • @Mud - URL 不是没有空格的任何字符串...它具有非常明确的语法。
    猜你喜欢
    • 2018-01-05
    • 2016-08-05
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 2015-06-23
    相关资源
    最近更新 更多