2013-06-02 17 views
6

Destek temelli normal ifadelerimi C++ 11 regex'e dönüştürüyorum. Ben bir yakalama grubunu url denilen vardır: boost ileC++ 11 Regex Capture Grupları Adına Göre

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

, bir smatch adıyla yakalama grubu almak için match.str("url") diyebiliriz olsaydı. std::smatch ile sadece endeksli alt eşlemeler görüyorum.

std :: smatch sınıfını kullanarak url yakalamasına nasıl erişebilirim?

+0

"(? . *?)' Yerine "(? P . *?)' I denediniz mi? – HamZa

+0

@HamZa C++ 11 regex'in adlandırılmış yakalama gruplarını destekleyip desteklemediğinden emin değilim. Sadece Stroustrup'un yeni "The C++ Programlama Dili" konusuna adanmış bölümün tamamını okudum ve bundan bahsetmiyor bile. Ve çevrimiçi referansların çoğu aksi belirtilmiyor. –

+0

Bu [yanıt] 'a göre adlandırılmış grupları desteklemiyor gibi görünüyor (http://stackoverflow.com/a/6398650). – HamZa

cevap

5

C++ 11 standardıyla bir yakalama grubunu adlandıramazsınız. C++ 11 regex ECMAScript sözdizimine uygundur. İşte her şeyi açıklayan bir bağlantıdır http://www.cplusplus.com/reference/regex/ECMAScript/. Bu belki hayal kırıklığı olsa da, gerçek bir düzenli ifade bunu düşünmezse bunu desteklemez.

+0

İç içe geçmiş bir grup ayıklama örneği gönderir misiniz? Belki de maç borunun her iki tarafında nerede olabilir? –

+0

Maçın çoktan yapıldığı anlamına geliyor – aaronman

+0

Temelde, benim adlandırılmış örnekleme dayalı adlandırılmış örneklere dayanarak url'yi nasıl verimli bir şekilde ayıklayacağımı görmek istiyorum. –