2012-08-08 17 views
9

के साथ स्ट्रिंग शुरू होने पर जांचना मैं सी ++ 11 के <regex> समर्थन का उपयोग कर रहा हूं, और यह जांचना चाहूंगा कि स्ट्रिंग की शुरुआत नियमित अभिव्यक्ति से मेल खाती है या नहीं। [अगर यह मदद करता है तो मैं बूस्ट पर स्विच कर सकता हूं, लेकिन मेरी धारणा यह है कि वे मूल रूप से वही हैं।]सी ++ 11 रेगेक्स: स्ट्रिंग

जाहिर है कि अगर अभिव्यक्ति के वास्तविक पाठ प्रस्तुतिकरण पर मेरा नियंत्रण है, तो मैं शुरुआत में ^ रख सकता हूं यह एक लंगर के रूप में।

हालांकि, अगर मेरे पास regex (या basic_regex) ऑब्जेक्ट है तो क्या होगा? क्या मैं एंकर को जोड़ने के लिए प्रस्तुत नियमित अभिव्यक्ति को संशोधित कर सकता हूं? या मुझे regex_search का उपयोग करना है, परिणाम प्राप्त करें, और जांचें कि यह स्थिति 0 पर शुरू होता है या नहीं?

+0

कई सामान्य स्ट्रिंग को रेगेक्स के रूप में माना जा सकता है। '" एबीसी "' एक रेगेक्स भी है, लेकिन केवल सटीक स्ट्रिंग से मेल खाता है। – nhahtdh

उत्तर

10

आप जब regex_search उदाहरण के लिए, निम्नलिखित प्रिंट "1" "0" का उपयोग कर, और std::regex_constants::match_continuous झंडा जोड़ सकते हैं:

#include <regex> 
#include <string> 

int main() 
{ 
    std::regex rx ("\\d+"); 

    printf("%d\n", std::regex_search("12345abc1234", rx, 
            std::regex_constants::match_continuous)); 
    printf("%d\n", std::regex_search("abc12345", rx, 
            std::regex_constants::match_continuous)); 
    return 0; 
} 

ध्वज का अर्थ है (सी ++ 11 §28.5.2/1 = तालिका 13 9):

अभिव्यक्ति केवल एक उप-अनुक्रम से मेल खाती है जो first से शुरू होती है।

+3

यह ध्वज के लिए एक उम, दिलचस्प नाम है, लेकिन यह वही है जो मैं चाहता था! ढेरों धन्यवाद – EvanED