3

私は、自分のプログラムで作成された構成ファイルを解析するために、ほとんどの日を正規表現について学習してきました。現在、設定ファイルは漠然とINIファイルに似ていますが、後で展開されます。このように構成されています

> ##~SECTIONNAME~##
> #KEY#value/#
> #KEY#value/#
> #KEY#value/#

> ##~ANOTHERSECTION~##
> #KEY#value/#
> #KEY#value/#
> #KEY#value/#

私がやろうとしているのは、セクション名を文字列として戻すことです。私の正規表現は#{2}〜(。*)〜#{2}で、オンラインのperelregexテスターで正常に機能します。しかし、C ++で実行すると、奇妙な結果が得られます。

    split_regex(sectionList,file,regex("#{2}~(.*)~#{2}"));

sectionListは、セクション名のリストを保持する一時的なデータホルダーです。Fileは、ロードされた構成ファイルからのすべてのテキストを含む文字列です。それが現在していることは、私に空白の最初のインデックスを与えることです。2番目のインデックスは、LASTセクションの下にあるすべての文字列を保持します。

私の最終的な目標は、ペアのベクトルを作成することです。一方はセクションリストのテキストを保持し、もう一方は別のベクトルを保持します。2番目のベクトルは、キーと値(または別のペア)を保持するクラスのインスタンスを保持します。

これについて行く良い方法は何ですか?正規表現の書き方がわかりました。しかし、ブーストで正規表現のドキュメントを見た後でも、その正規表現を使用する方法がまだよくわかりません。

私の質問を読んでくれてありがとう。お時間を割いていただき、誠にありがとうございます。どんな助けでもいただければ幸いです。

4

1 に答える 1

2

Boost関数のドキュメントsplit_regexをご覧ください。提供された正規表現は、文字列を分割するための区切り文字として使用されます。

正規表現は必要な部分と一致しますが、本当に使用したい場合は、セクション名の間split_regexのすべてと一致する必要があります。

最新バージョンのC++(C ++ 11)は、正規表現に関する新機能を提供します。この特定の関数は、文字列が特定の正規表現に一致するかどうかを判断し、すべての一致を返すことができます。最後にリンクされたページで提供されている例を見てください。

于 2013-01-11T21:19:42.500 に答える