1

次の文字列があり、そこから 1 より大きいアルファベット部分 (アルファベット部分文字列) のみを抽出します。

  • % ディップ出席者 --> 出席者
  • 4月。専門知識 --> 4 月、専門知識
  • ncpc コンダムナー --> コンダムナー

私は次のピースコードを試しています:

#include <regex>
#include <iostream>
void main()
{
    const std::string s = "% d. i.p.p. attendu";
    std::regex rgx("[a-zA-Z]{2,20}");
    std::smatch match;

    if (std::regex_search(s.begin(), s.end(), match, rgx))
        std::cout << "match: " << match[1] << '\n';
} 

しかし、コードを実行すると次のエラーが発生します: 'std::regex_error' what() のインスタンスをスローした後に終了が呼び出されました: regex_error

助けてくれませんか、ありがとう、ハニ。

gccの正規表現は忌まわしいので、ブーストを使用することができました。

#include <boost/regex.hpp>

void main()
{
        const std::string s = "% d. i.p.p. tototo attendu";
        boost::regex re("[a-zA-Z]{4,7}");
        boost::smatch matches;
        if( boost::regex_search( s, matches, re ) )
         {
               std::string value( matches[0].first, matches[0].second );
                cout << value << "  ";
          }
}

私は出席者を見つけましたが、出力は tototo のみです。増えてない

返り値は「tototo attendu」です 1文字列ではなく、一度に1つずつ値を返せないかと思っていました

4

1 に答える 1