首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

URL正则表达式解决方案

2013-01-11 
URL正则表达式我这个例子中的正则表达式必须有http前缀才能检测出来,现在需要改成无论带不带http前缀都能

URL正则表达式
我这个例子中的正则表达式必须有http前缀才能检测出来,现在需要改成无论带不带http前缀都能检测出来的。
正则不太熟,求调教~


#include "stdafx.h"
#include <regex>
#include <iostream>
#include <string>
using namespace std;

void show_url_parts(const std::wstring& url)
{
const tr1::wregex pattern(_T("(http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?")/*,tr1::wregex::icase*/);
tr1::wsmatch what;
wstring result = url;

std::wcout.imbue( locale(locale(), "", LC_CTYPE) );
while (tr1::regex_search(result, what, pattern))
{
std::wcout << what.prefix() << std::endl;
std::wcout << what[0] << std::endl;
result = what.suffix();
}
std::wcout << result << std::endl;

}

int main()
{
std::wstring url1 = _T("你好www.baidu.gov.cn第三方阿萨德.html的 https://www.b.com奥维德https://www.c.com收到");
show_url_parts(url1);
system("pause");

return 0;

}

[解决办法]
把http那部分去了就可以了
[解决办法]
最好先把需求弄明确一些,比如你把http://等前缀去掉,那么test.mp3也会被认作是网址了。
[解决办法]
(http[s]{0,1}
[解决办法]
ftp)://……
改为
((http[s]{0,1}
[解决办法]
ftp)://){0,1}……

热点排行