2

二重引用符で囲まれた単語のみを抽出したいと思います。したがって、コンテンツが次の場合:

Would "you" like to have responses to your "questions" sent to you via email?

答えは

1-あなた2-質問

4

3 に答える 3

2
std::string str("test \"me too\" and \"I\" did it");
std::regex rgx("\"([^\"]*)\""); // will capture "me too"
std::regex_iterator current(str.begin(), str.end(), rgx);
std::regex_iterator end;
while (current != end)
    std::cout << *current++;
于 2013-02-23T13:15:04.020 に答える
1

本当に正規表現を使用したい場合は、次のように行うことができます。

#include <regex>
#include <sstream>
#include <vector>
#include <iostream>

int main() {
    std::string str = R"d(Would "you" like to have responses to your "questions" sent to you via email?)d";
    std::regex rgx(R"(\"(\w+)\")");
    std::smatch match;
    std::string buffer;
    std::stringstream ss(str);
    std::vector<std::string> strings;
    //Split by whitespaces..
    while(ss >> buffer) 
        strings.push_back(buffer);
    for(auto& i : strings) {
        if(std::regex_match(i,match, rgx)) {
            std::ssub_match submatch = match[1];
            std::cout << submatch.str() << '\n';
        }
    }
}

MSVCとClangだけがサポートしていると思いますが、それ以外の場合は、boost.regexをそのように使用できます。

于 2013-02-23T10:45:20.743 に答える
0

この回答split()の関数を使用して、奇数の項目を抽出します。

std::vector<std::string> itms = split("would \"you\" like \"questions\"?", '"');
for (std::vector<std::string>::iterator it = itms.begin() + 1; it != itms.end(); it += 2) {
    std::cout << *it << endl;
}
于 2013-02-23T10:38:20.517 に答える