在PHP中,我可以编写正则表达式从文本中提取URL。 想知道C ++中可用的任何类或方法吗?
我正在处理流数据,其中可能包含网址。我想从那里提取具有计数值的每个URL。
我可以使用矢量或其他数据结构进行后续处理,但问题是标题。
答案 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;
}
}
了解详情
答案 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>
)但是今天应该看看它并回复一些代码示例。