1

文字列の例:

std::string sentence = "Hello {Bobby}, hows {Johns}?."

boost::regex を使用して中括弧内のすべてを取得できるようにしたいのですが、ヘルプやガイダンスをいただければ幸いです。

文字列には {bobby|john|cindy} または {bobby||cindy} または {{bobby}} を含めることができ、その場合は {bobby} になります。そのための正規表現を理解しようとしています。

ありがとう。

4

3 に答える 3

2

全体的なアプローチとコード例については、こちらで説明しています

必要な正規表現は次のようです。

([^{}]*\{([^{}]*)\})+

この正規表現は、文字列が正しく対になったネストされていない中かっこを使用しない限り、まったく一致しません。一致する場合はregex_iterator、各一致でサブグループを 1 秒おきに処理するために使用できます。

于 2012-07-03T21:36:58.800 に答える
0

Davidの回答に対するコメントに基づいて、正規表現が直接解析できない領域に陥っている可能性があります。あなたが二重中括弧で説明したようなネストされたものは、解析するために実際の文法が必要になるかもしれないものとして私を襲います。その場合、Bisonについて学ぶ「喜び」を得ることができます。解析できない場合は、簡単なものよりも具体的なものが必要です

単一の中かっこ、かなり単純。二重の中にあるのは... ドラゴンでしょう。すると、「{do you {wan|here}}?」というようなことになってしまうからです。Bison に提供される文法は、それを解決することができます。単純な正規表現ができるかどうかはわかりません。

于 2012-07-03T23:09:32.340 に答える
-1

入力はそんなに簡単ですか?中括弧内の部分文字列のみを取得しますか? 入力が正規表現のすべての機能をカバーしていない場合は、単純なループを作成して文字列を調べ、中括弧内にある場合の状態を維持し、文字列のそれらのバイトを適切に処理することができます。

于 2012-07-03T21:24:51.830 に答える