5

ファイルから引用符の間のコンテンツを取得しようとしていますが、正規表現を使用しています。これは私が使用している正規表現です:

id=\"([^\"]+)\"|title=\"([^\"]+)\"

ご覧のとおり、すべての特殊文字がエスケープされています。正規表現テスターでは完全に機能しますが、C++ コードで使用するとタイトルが見つかりません。IDは常に問題なく見つかります。いくつかのバリエーションを試してみましたが、その半分を削除しました (| の前)。

id="60973129" title="EPA"

これは私が使用しているC++コードです:

std::regex rgx("id=\"([^\"]+)\"|title=\"([^\"]+)\"");
std::smatch match;

if (std::regex_search(line, match, rgx)) {
    for (int i=0; i < match.size(); ++i) {
            std::cout << match[i];
    }
}

編集:個別に配置すると動作することがわかりましたが、title=\"(.+?)\"後で長い行をスキャンする必要があるため、いくつかの正規表現を使用する必要があり、目的が果たせません。

4

1 に答える 1

2

「全体が一致するか」ではなく、文字列内で「何かが一致するか」と言っているため、おそらくテスターで機能します。

とにかく | は「または」です。どちらかを見つけます。示されているように文字列を一致させるには、| を変更します。スペース、または [ \t]+ などの任意の量の空白のインジケーターのいずれかにすると、問題なく動作すると思います。

于 2013-05-07T14:23:40.363 に答える