2014-09-01 37 views
5

Ben regex_match ile ilgili sorun nedir? Çok basit anlatım

#include <regex> 
using namespace std; 

//... 

if (!regex_match("abab",regex("(ab?)*"))) 
{ 
    //the problem is - why we are here? why it doesn't match? 
} 

burada http://regexpal.com/ kontrol problemi VS2010 kullanarak ve C++ konsol uygulaması kodlama ve karşılaştığı ediyorum - bu

+5

Düzenli ifade kitaplığının birçok uygulaması özellikle VS 2010'da kabataslaktır. VS 2010'un ** bir C++ 11 derleyicisinin olmadığını unutmayın, sadece _some_ C++ 11 özelliklerini desteklemektedir. –

+0

@CaptainObvlious haklısın! VS2012'de test ediyorum, bu normal ifade benim için eşleşti. –

+0

[gcc ile çalışır] (http://coliru.stacked-crooked.com/a/65f607082de2cc06). –

cevap

0

Çok basit eşleşir: tüm sekans eşleşti alırsa regex_match tek gerçek döndürür. Bir dizenin normal ifadenizi içerip içermediğini görmek istiyorsanız regex_search öğesini kullanmak isteyebilirsiniz.

"ab?" "aba" ile eşleşir, tekrarlayıcı ("() *") bu eşleşmeyi bir kez yapar. Kalan "b", bu yüzden tam bir eşleşme değil.

Üzgünüm, normal ifadeyi yanlış okuyorum. Tam bir eşleşme olmalı. Yeterince Garip:

regex_match("aab", regex("(ab?)*")) == true 

(QT Creator 2010,05, makespec = VS2010 ile test edildi) kullanıldığı STL içinde bir hata gibi görünüyor. Regex_match ifadesini regex_search ile kodunuzda eşleştirmek doğrudur, ancak match_results boştur - bir şeyler hala yanlıştır.

VS2012 ile tüm testler doğru şekilde eşleşti.

İlgili konular