だから、私はサンプルファイルを持っていて、一度に1行ずつ読み込もうとしています。行の最初の単語に基づいて、残りの部分を処理する方法を決定したいと考えています。
baa made up text
squeak 954823
moo 0 321 123 45543
. ^
. more moo lines here, fixed in length
. v
squeak x
woof 8
oink 1 2 3 4 5 6 7 98 93 12 23 43
.
. more oink lines here, m in quantity, differing in length
.
woof x
baa x
//more text here
現時点でのみ使用しています。これらの形式の行を処理するための正規表現がいくつかあります。私が整理している問題は、正しい順序でサブグループの一致に適切にアクセスする方法です。私が見つけたすべての資料は、GCC をコンパイラーと呼んでおり、vc++ コンパイラーとは異なる動作を経験しています。Visual Studio 2010 を使用しています。
各行が以下と一致することを確認したい:
^(baa|squeak|moo|woof|oink)\s(.*)
これは私が Expresso で作成/構築した構文ですが、VC++ 正規表現が探しているものとはまったく異なります。今のところ、それが正しいと仮定します。それは、私が望む 2 つのサブグループを記述しています。
次に、上記の最初の例の行を見て、最初のサブグループが「baa」に一致することを確認したと仮定しましょう。確認したいのは、2 番目のサブグループは「x」だけですか、それともそれ以上で構成されているのでしょうか? それ以上で構成されている場合は関数 A() を実行し、それ以外の場合は関数 B() を実行します。
次に、最初のサブグループが一致する単語に応じて、2 番目のサブグループを別の正規表現で処理し、サブグループのさまざまな部分をさらに分割します。残念ながら、一致を繰り返すことは完全に線形ではないようです。
私の読書では、私が探していたものを実行しているように見える regex_split() という名前の boost::regex 関数に遭遇しましたが、非推奨です。
私はboost::tokenizerの機能も調べていました.私はそれをやりたいことをさせることができますが、正規表現の方法はよりきれいになることを約束します.
だから、私の質問は、一行で:
説明したようにサブグループを分割するために、Boost ライブラリを使用せずに Visual Studio 2010 のビジュアル C++ で regex_iterator() 関数を使用する正しいコードは何ですか?
標準の正規表現ライブラリで名前付きサブグループ(Perl風)を使用する方法はありますか?