【问题标题】:Find a url in a document using regex in ruby在 ruby​​ 中使用正则表达式在文档中查找 url
【发布时间】:2021-06-25 13:32:43
【问题描述】:

我一直在尝试在 html 文档中查找 url,这必须在正则表达式中完成,因为 url 不在任何 html 标记中,所以我不能为此使用 nokogiri。为了获得 html,我使用了 httparty,我就是这样做的

require 'httparty'
doc = HTTParty.get("http://127.0.0.1:4040")
puts doc

输出html代码。为了获得网址,我使用了.split() 方法来访问网址。完整代码是

require 'httparty'

doc = HTTParty.get('http://127.0.0.1:4040').split(".ngrok.io")[0].split('https:')[2]

puts "https:#{doc}.ngrok.io"

我想使用正则表达式来执行此操作,因为 ngrok 可能会更新其 localhost html 文件,因此此代码将不再起作用。我该怎么做?

【问题讨论】:

  • "该 url 不在任何 html 标签中" -- 废话,当然是在 HTML 标签中,否则你获取的不是有效的 HTML! !!也许您的意思是它位于<body> 中间的某个位置,而不是像<div class="some-identifier"> 这样的特定明确位置,这很公平,但您的问题描述具有误导性。
  • 现在,我们显然 绝对不知道 http://127.0.0.1:4040 在小时机器上呈现的内容。因此,我们不可能知道您的解决方案是否有效,或者是否有信心提供推荐的替代方案/改进方案。您需要提供更多信息。
  • 听起来您实际上想要做的是grep 类似%r{https://\w+\.ngrok\.io} 的HTTP 正文?因为您当前的代码存在缺陷,.split('https:')[2] 非常天真地假设在ngrok.io URL 之前的页面上某处恰好提到了 2 个 URL?
  • 实际上。 localhost:4040 是一个 ngrok 本地服务器配置。我只是说这是一个 ngrok localhost 网页。但我喜欢你的回答
  • “ngrok localhost 网页”不是一个非常精确的描述。它取决于版本或配置吗?有没有一种方法可以完全重现您的问题,而 无需自己下载/安装 ngrok?我强烈建议在您的问题中分享实际的 HTML。这样,任何阅读本文的人都可以轻松、明确地运行您的代码以获得相同的结果。

标签: ruby httparty


【解决方案1】:

如果我理解正确,您想查找与“https://(any subdomain).ngrok.io”匹配的所有主机名,对吗?

如果您想将String#scan 与正则表达式一起使用。这是一个例子:

# get your body (replace with your HTTP request)
body = "my doc contains https://subdomain.ngrok.io and https://subdomain-1.subdomain.ngrok.io"
puts body

# Use scan and you're done
urls = body.scan(%r{https://[0-9A-Za-z-\.]+\.ngrok\.io})
puts urls

这将产生一个包含["https://subdomain.ngrok.io", "https://subdomain-1.subdomain.ngrok.io"]的数组

如果您想删除重复项,请致电 .uniq

这并不能处理所有边缘情况,但它可能足以满足您的需要

【讨论】:

    猜你喜欢
    • 2016-11-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    相关资源
    最近更新 更多