2015-06-29 4 views
6

के साथ अपेक्षित काम नहीं कर रहा है मैं सी ++ 11 में नियमित अभिव्यक्तियों का अध्ययन कर रहा हूं और यह रेगेक्स खोज झूठी लौट रही है। क्या कोई जानता है कि मैं यहाँ क्या गलत कर रहा हूं? । मुझे पता है कि .* न्यूलाइन को छोड़कर वर्णों की किसी भी संख्या के लिए खड़ा है।रेगेक्स सी ++ regex_match

तो मैं regex_match() को वापस लौटने की उम्मीद कर रहा था और आउटपुट "पाया" था। हालांकि आउटपुट "नहीं मिला" होने के लिए बाहर आ रहा है।

bool found = regex_search("<html>",regex("h.*l")); 

IDEONE demo

सादे शब्दों में, regex_search देखें दिया स्ट्रिंग में पर सबस्ट्रिंग के लिए खोज करेंगे किसी भी स्थिति:

#include<regex> 
#include<iostream> 

using namespace std; 

int main() 
{ 
    bool found = regex_match("<html>",regex("h.*l"));// works for "<.*>" 
    cout<<(found?"found":"not found"); 
    return 0; 
} 
+0

आप किस कंपाइलर का उपयोग करते हैं? जीसीसी समर्थन सी ++ 11 के कुछ संस्करण, लेकिन regex – Brahim

+0

का पूरी तरह से समर्थन नहीं करते हैं, प्रश्न का उत्तर दिया गया है regex_match बाद के लिए काम नहीं करता –

उत्तर

11

आप उपयोग करने के लिए एक regex_search बल्कि regex_match से की जरूरत है। regex_match केवल तभी सत्य होगा यदि संपूर्ण इनपुट स्ट्रिंग मिलान की गई है (जावा में matches के समान व्यवहार)।

regex_match प्रलेखन कहते हैं: लक्ष्य अनुक्रम नियमित अभिव्यक्ति rgx से मेल खाता है

रिटर्न या नहीं।
संपूर्ण लक्ष्य अनुक्रम को इस फ़ंक्शन के लिए नियमित अभिव्यक्ति से मेल खाना चाहिए> सत्य लौटने के लिए (यानी, मैच से पहले या उसके बाद किसी भी अतिरिक्त वर्ण के बिना)। एक फ़ंक्शन के लिए जो सत्य लौटाता है जब मैच> अनुक्रम का केवल एक हिस्सा है, regex_search देखें।

regex_search अलग है:

रिटर्न कि क्या लक्ष्य अनुक्रम (विषय) में कुछ उप अनुक्रम नियमित अभिव्यक्ति rgx (पैटर्न) से मेल खाता है।

+0

ओह मुझे समझाए जाने के लिए धन्यवाद –

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