【问题标题】:Get all url from text by regex通过正则表达式从文本中获取所有 url
【发布时间】:2015-10-28 08:55:35
【问题描述】:

我需要使用正则表达式从文本文件中获取所有 url。但不是所有的 url,以某个模板开头的 url。例如。我有文字:

{"Field_Name1":"http://google.ru","FieldName2":
"["some text", "http://example.com/view/...&id..&.."]",
"FieldName3": "http://example.com/edit/&id..."}someText"
["some text", "http://example.com/view/...&id..&.."]",
"FieldName3": "http://example.com/view/&id..."}someText2{..}someText.({})

我需要获取所有网址,例如http://example.com/view/..... 我尝试使用这个正则表达式,但它不起作用。可能是我搞错了。

 ^(http|https|ftp)\://example\.com\/view\/+[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?[^\.\,\)\(\s]$

我不需要纯 url 检查器,我需要可以获取以某个模板开头的 url 的检查器

【问题讨论】:

  • @stribizhev 但是“example.com/VIEW/....”呢?我认为这部分我的正则表达式有问题
  • 解析json不是更好吗?
  • @Yaron 但如果它不是有效的 json,因为我有类似“{json valid}Some text”的东西,所以对于“Some text”,我们没有有效的 json。并且在每次迭代中,一些文本的长度不同

标签: regex


【解决方案1】:

这个怎么样?

((ftp|http[s]?):\/\/example.com\/view\/.*?)\"

“/view/”之前的第一部分应该清楚。其余的 ".*?)\"" 表示,显示双引号前的所有内容。

【讨论】:

    【解决方案2】:

    我认为这会奏效!我在 regexr.com 上试了一下,它似乎只选择了 url 部分,因为文本字符串实际上并没有连续多个句点。

    (?!")h.+.+[a-z]*

    编辑:做了一个更好的,或者至少我认为我做到了。基本上,表达式说:“查找引号,如果下一个字符是 h,则将其包含在匹配项中,并将其作为起点,然后包含其后的任何字符,导致一个句点,后跟任何小写字母。可能有一百万个。只要在它之前有一个句点,你就很好,除非字符串后面有另一个句点,否则它不会选择超出那个。

    【讨论】:

    【解决方案3】:

    通用:

    /(ftp|http|https)\:\/\/([\d\w\W]*?)(?=\")/igm 
    

    模板:

    /(ftp|http|https)\:\/\/example\.com\/view\/([\d\w\W]*?)(?=\")/igm 
    

    【讨论】:

    • 虽然此正则表达式可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多