有没有办法从C ++中的文本中提取URL

时间:2013-12-18 04:10:56

标签: c++ regex

在PHP中,我可以编写正则表达式从文本中提取URL。 想知道C ++中可用的任何类或方法吗?

我正在处理流数据,其中可能包含网址。我想从那里提取具有计数值的每个URL。

我可以使用矢量或其他数据结构进行后续处理,但问题是标题。

2 个答案:

答案 0 :(得分:4)

C ++ 11引入了<regex>作为标准库的一部分。

让我们来看看如何使用它。

首先我们需要导入标题。

#include <regex>

现在让我们声明我们的URL正则表达式。现在我们将使用非常简单的东西。我会留给你用更完整的正则表达式替换它。请注意我们如何使用\\代替\来逃避事情。 \本身是C ++中的一个特殊字符,因此我们需要将其转义。

std::regex url(".*\\..*");

让我们创建一个字符串来对其进行测试。

std::string url_test = "example.com";

现在让我们检查url_test是否与url匹配,并相应地打印出一条消息。

if(regex_match(url_test, url)) {
  std::cout << "It's a url!" << std::endl;
} else {
  std::cout << "Oh snap! It's not a url!" << std::endl;
}

我们的完整计划:

#include <iostream>
#include <regex>
#include <string>

int main()
{
  std::regex url(".*\\..*");
  std::string url_test = "example.com";

  if(regex_match(url_test, url)) {
    std::cout << "It's a url!" << std::endl;
  } else {
    std::cout << "Oh snap! It's not a url!" << std::endl;
  }
}

http://www.cplusplus.com/reference/regex/

了解详情

答案 1 :(得分:0)

关于正则表达式,我使用以下内容来匹配多个链接:

\b(?:(?:(?:https?|ftp|file)://|www\.|ftp\.)[-A-Z0-9+&@#/%?=~_|$!:,.;]*[-A-Z0-9+&@#/%=~_|$]
   | ((?:mailto:)?[A-Z0-9._%+-]+@[A-Z0-9._%-]+\.[A-Z]{2,4})\b)
|"(?:(?:https?|ftp|file)://|www\.|ftp\.)[^"\r\n]+"?
|'(?:(?:https?|ftp|file)://|www\.|ftp\.)[^'\r\n]+'

这允许在开始时使用和不使用http / https进行网络链接匹配,在开始时使用和不使用mailto的电子邮件链接,ftp链接和文件链接以及单引号或双引号内的链接。

我没有使用C ++的正则表达式功能(<regex>)但是今天应该看看它并回复一些代码示例。