string pattern = "(((http[s]{0,1}|ftp)://)?[a-zA-Z0-9\\.\\-]+\\.(com|cn|net|com\\.cn|org|biz|name|info|tv|cc|([a-zA-Z]{2,6}))(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)
?)";
能够优先匹配有这些com|cn|net|com\\.cn|org|biz|name|info|tv|cc|后缀的,
最后再看[a-zA-Z]{2,6}是否匹配得上。
使用google的re2正则表达式引擎,找出一个文本中的url串。
#include <vector>
#include <string>
#include <iostream>
#include <cassert>
using namespace std;
#include "re2/re2.h"
int main() {
//string contents = "http://baidu.comseseses";
string contents = "a沈飞四分trip.taobao.combs:23www.a.c23sfeoa.comhshttp://www.baidu.comefi3xx:68g.com?sfhe*shttps://g.cnfeh=2332a:b3"; // Fill string somehow
string pattern = "(((http[s]{0,1}|ftp)://)?[a-zA-Z0-9\\.\\-]+\\.(com|cn|net|com\\.cn|org|biz|name|info|tv|cc|([a-zA-Z]{2,6}))(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)
?)";
re2::StringPiece input(contents); // Wrap a StringPiece around it
string var;
while (RE2::FindAndConsume(&input, pattern, &var)) {
cout << var << endl;
}
return 0;
}
编译方法 g++ test.cpp -lre2
匹配到的串为:
trip.taobao.com
23www.a.c23sfeoa.com
http://www.baidu.com
68g.com
https://g.cn