2014-09-01 5 views
5

मैं VS2010 उपयोग कर रहा हूँ और C++ सांत्वना आवेदन कोडिंग और का सामना करना पड़ा समस्याregex_match के साथ क्या गलत है? बहुत ही सरल अभिव्यक्ति

#include <regex> 
using namespace std; 

//... 

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

यहाँ http://regexpal.com/ जाँच - यह

+5

नियमित अभिव्यक्ति लाइब्रेरी के कई कार्यान्वयन स्केची हैं, खासकर वीएस 2010 में। ध्यान रखें कि वीएस 2010 ** ** एक सी ++ 11 कंपाइलर नहीं है, यह बस _some_ C++ 11 सुविधाओं का समर्थन करता है। –

+0

@CaptainObvlious आप सही हैं !! मैं इसे वीएस2012 में परीक्षण करता हूं, इस तरह रेगेक्स मेरे लिए मेल खाता है। –

+0

[जीसीसी के साथ काम करता है] (http://coliru.stacked-crooked.com/a/65f607082de2cc06)। –

उत्तर

0

बहुत ही सरल मेल खाता है: regex_match ही सच्चा लौटाता है यदि पूरा अनुक्रम मिलान होता है। यदि आप देखना चाहते हैं कि स्ट्रिंग में आपका रेगेक्स है या नहीं, तो आप regex_search का उपयोग करना चाह सकते हैं।

"अब?" "aba" से मेल खाता है, दोहराना ("() *") इस मैच को एक बार बनाते हैं। शेष "बी" है, इसलिए यह एक पूर्ण मैच नहीं है।

मुझे खेद है, मैं रेगेक्स को गलत तरीके से पढ़ता हूं। यह एक पूर्ण मैच होना चाहिए। काफी अजीब:

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

STL (क्यूटी निर्माता 2010.05, makespec = VS2010 के साथ परीक्षण) का इस्तेमाल किया भीतर एक बग होने के लिए लगता है। अपने कोड मैचों में regex_search के साथ regex_match को प्रतिस्थापित करना सही है, लेकिन match_results खाली हैं - यह इंगित करता है कि कुछ अभी भी गलत हो रहा है।

वीएस2012 के साथ सभी परीक्षण सही ढंग से मेल खाते हैं।

संबंधित मुद्दे