2013-06-02 18 views
6

私はブーストベースの正規表現をC++ 11の正規表現に変換しています。私は、キャプチャグループがurlと呼ばれる持っている:C++ 11 Regex Capture Groups名前で

\s*?=\s*?(("(?<url>.*?)")|('?<url>.*?)')) 

ブーストを使用すると、smatchを持っていた場合は、名前でキャプチャグループを取得するためにmatch.str("url")を呼び出すことができます。 std::smatchでは、インデックス付きの部分一致のみが表示されます。

std :: smatchクラスを使用してURLキャプチャにアクセスするにはどうすればよいですか?

+0

'(?。*?)'の代わりに '(?P 。*?)'を試しましたか? – HamZa

+0

@HamZa C++ 11の正規表現が名前付きキャプチャグループをサポートしているかどうかはわかりません。 Stroustrupの新しい「The C++ Programming Language」の話題に特化した章全体を読んだだけで、それについては言及していません。オンラインの参考文献の多くはそうでないことを示すようには見えない。 –

+0

この[回答](http://stackoverflow.com/a/6398650)によれば、名前付きグループはサポートしていないようです。 – HamZa

答えて

5

C++ 11標準でキャプチャグループの名前を付けることはできません。 C++ 11の正規表現は、ECMAScript構文に準拠しています。ここにそれをすべて説明するリンクhttp://www.cplusplus.com/reference/regex/ECMAScript/があります。あなたがそれについて本当の正規表現がこれをサポートしないと思うなら、これは余計かもしれませんが、これはおそらく残念です。

+0

ネストされたグループの抽出例を投稿できますか?おそらくパイプの両側にマッチがあるのでしょうか? –

+0

あなたは既にマッチしたことを意味します – aaronman

+0

私は基本的に私の掲載された例に基づいて私のURLを効率的に抽出する方法を見たいと思っています。 –