2016-11-06 19 views
2

私はいくつかのテキストの正規表現と一致するためにRE2を使用していますが、私は結果を抽出するのに苦労しています。私が欲しいものRE2から正規表現の完全一致を取り出す方法は?

は次のとおりです。

テキスト: "サンプルテキスト"
正規表現: "P * X"
は、テキストから完全な正規表現の一致を抽出します。 "PLEテックス"

を私ができますこれをサポートするRE2 APIの関数を見つけることはできません。 PartialMatchは正規表現(括弧で囲まれている)からグループを抽出するだけですが、私の正規表現はユーザから来ているので、正規表現を常にグループに入れるよう強制することはできません。私はまた、エレガントなソリューションのようには聞こえず、ユーザーが正規表現の先頭に修飾子を置くとうまくいかないので、グループ内の各正規表現を手動で折り返したいとは思わない。これは非常に基本的な機能のようですので、私はこれを行う明確な方法は驚いています。

誰にでも解決策がありますか?

+0

キャプチャグループでパターン全体をラップする必要があるようです。 'string text; if(RE2 :: PartialMatch( "サンプルテキスト"、 "(p。* x)"、&text)){...} ' –

+0

提案をありがとう!私が述べたように、私は正規表現をユーザから得ているので、正規表現の冒頭で修飾語を使うかもしれないので、私はそれをラップしたくない。その場合、元の正規表現(私がそれをグループ化すると、モディファイアはちょうど正規表現の一部になるので、それはもはや最初ではないからです)。 – Zoli

+0

外部グループはこれらのインライン修飾子に影響しません。 –

答えて

2

インラインモディファイアはパターンの冒頭にある必要はなく、ペアの外側カッコを追加するとパターン全体をラップすることが有効です。 ((?s)go.*there|take.*this)に変更すると、(?s) DOTALL修飾子は、パターン内の.の両方に適用されます。

string text; 
if (RE2::PartialMatch("Sample text", "(p.*x)", &text)) { 
    // Put more code here 
} 
関連する問題