boostの正規表現でキャプチャグループの名前を取得する方法を知りたいと思います。boost regexの名前付きキャプチャ/グループのリスト
たとえば、名前付きキャプチャグループで有効な正規表現であると予想される文字列をユーザーが入力した場合、正規表現内の定義済みグループのリストを反復してそれらのグループの名前を取得する方法を教えてください。 boostはそうするための設備を提供していますか、または私はそれらの名前を抽出するために私自身のパーサーを書くことが期待されていますか?一例として、
、入力文字列がある場合:(?<year>[0-9]{4}).*(?<month>[0-9]{2}).*(?<day>[0-9]{2})
は、私は正規表現のうち、「年」、「月」、および「日」を抽出することができるようにしたいです。
おそらく、あなたは正規表現をboost regexにコンパイルしてから、そこからキャプチャ名を得ることができます。これを行うことができますが、名前付きのサブ式に問題があります。技術的には、正規表現が解析されると、各名前はハッシュに変換され、ベクタに落とされます。ここで、さらなる参照はidを介して行われます。 boost_regex.hppの 'class named_subexpressions'を見てください。実際の文字列名のマップを作成するように変更することができます。コールを追加してグループインデックス名を取得できる場所。 – sln
(申し訳ありませんが、ソースはbasic_regex.hppでなければなりません)私はこれを行う数行を投稿できますが、エンジンを再コンパイルする必要があります。これが合法であるかどうかはわかりません。 – sln
これは次のようなものです:classname_subexpressions {public:... voidset_name(constcharT * i、constcharT * j、intindex){... std :: stringstmp(i、j); intalen =(int)stmp.length(int) )}; std :: stringget_name(intndx)const {if(longest_name> 0){autogroupName = m_sub_sNames.find(long)}この例では、 (int); std :: string m_sub_sNames;};}};}}};}}}}}}}}}}}}}}}}}}}}}}}}}}}である。 ...}; ' –
sln