次の文字列があり、そこから 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つずつ値を返せないかと思っていました