2017-01-22 6 views
0

C++ 11で単純な設定ファイルパーサーを作成しており、正規表現を使用してテキストファイルからkey = valueのペアを選びたいとします。私は#記号で示されているこのファイルのコメントをサポートしたいと考えています。これまでのところ、私は次のようしている:Regex:キャプチャグループ内の末尾の空白を無視する

^(\w+)\s*=\s*([^#]+) 

これは、行の先頭から始まる英数字のパラメータ名と一致し、=文字の周りのオプションのホワイトスペースを可能にした後、コメント記号までのすべてをキャプチャします。これは、次の例のを除いて、非常にうまく動作するようです:コメント#コメント

PARAM_1 =テストは、第二のキャプチャグループは、パラメータ値の最後と#記号の間に空白をキャプチャします。とにかく、2番目のキャプチャグループの末尾の空白を無視することができますか?

+0

使用している言語/ツールはどれですか? –

+0

私はC++ 11とstd :: regex_searchを使用しています – rozzy

答えて

1

この正規表現は、あなたの例で動作します:#または行末が発見される前に

^(\w+)\s*=\s*([^#\n]+?)\s*(?=#|$) 

それは空白まで、あなたの元の第2のグループのために貪欲にならないように修正正規表現、マッチです。

Hereの例です。

+0

それは素晴らしい、ありがとう! – rozzy

関連する問題