私は、多くの特殊文字、空白、およびURLを含む文字列からURLをフィルタリングしようとしています。私は正規表現を使用しようとしましたが、それは失敗します、それは時々URLを整列するのを管理しますが、出力にはまだ特殊文字と空白が含まれています。敬具 文字列からURLをフィルタリングする
string str;
std::ifstream in("c:/Users/Petrus/Documents/History", std::ios::binary);
std::stringstream buffer;
if (!in.is_open()){
cout << "Failed to open" << endl;
}
else{
cout << "Opened OK" << endl;
}
buffer << in.rdbuf();
std::string contents(buffer.str());
std::ofstream out("urls.txt");
unsigned counter = 0;
std::regex word_regex(
R"(^(([^:\/?#]+):)?(//([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?)",
std::regex::extended
);
auto words_begin = std::sregex_iterator(contents.begin(), contents.end(), word_regex);
auto words_end = std::sregex_iterator();
for (std::sregex_iterator i = words_begin; i != words_end; ++i) {
std::smatch match = *i;
std::string match_str = match.str();
for (const auto& res : match) {
counter++;
std::cout << counter++ << ": " << res << std::endl;
}
std::cout << " " << match_str << '\n';
}
system("PAUSE");
return 0;
P
}
をあなたは逃げることができるかもしれませんデータファイルの内容に応じてより単純な 'regex'を使用します。 – Galik
正規表現はほとんど確実にここに行く方法ですが、それがうまくいかない入力の例を挙げることができない限り、正規表現のデバッグを手助けすることはできません。 –
フィルタリングしようとしているファイルの先頭です。 URLのリンクはファイル内にあります。 http://pastebin.com/wA9N1Gbi –