2

私は単純なケースを実装しようとしています(基本的に、2つのタグの間のテキストを見つけます)。ライン取りたい

/* 私のコメント 1 */

/* 私のコメント 2 */

/* 私のコメント 3 */

出力として。キャプチャ グループを 1 に制限する必要があるようですか? 文字列Hello /* my comment 1 */ worldで私が欲しいものを手に入れるので - res[0] には /* 私のコメント 1 が含まれます */

#include <iostream>
#include <string>
#include <regex>

int main(int argc, const char * argv[])
{
    std::string str = "Hello /* my comment 1 */ world /* my comment 2 */ of /* my comment 3 */ cpp";

    std::cmatch res;
    std::regex rx("/\\*(.*)\\*/");

    std::regex_search(str.c_str(), res, rx);

    for (int i = 0; i < sizeof(res) / sizeof(res[0]); i++) {
        std::cout << res[i] << std::endl;
    }

    return 0;
}
4

1 に答える 1

12

量指定子を貪欲ではないバージョンに変えることで、正規表現が の最初の出現までのみ一致するようにします。これは、その後に疑問符を追加することで実現されます。*/*

std::regex rx("/\\*(.*?)\\*/");
于 2013-01-16T14:34:31.977 に答える