2011-09-28 14 views
13

क्या कोई दोनों के बीच मतभेदों को समझा सकता है? अभी सीखना बेहतर होगा? ज्ञान एक से दूसरे में कैसे हस्तांतरित होगा और इसके विपरीत?बूस्ट। रेगेक्स बनाम सी ++ 11 रेगेक्स

+5

मानक तरीके सीखना कभी बुरा नहीं होता है। –

+3

मानक लाइब्रेरी सी ++ 11 रेगेक्स से सावधान रहें, क्योंकि यह अभी भी जीसीसी द्वारा पूरी तरह कार्यान्वित नहीं है: http://stackoverflow.com/questions/4716680/c0x-regex-in-gcc –

उत्तर

10

बूस्ट रेगेक्स लाइब्रेरी ने इसे सी ++ 0x में बनाया है, इसलिए मुझे लगता है कि इसे धीरे-धीरे बढ़ावा से हटा दिया जाएगा। हालांकि, बूस्ट का उपयोग करना अच्छा है क्योंकि आप इसे अभी भी C++ 0x समर्थन के बिना कंपाइलर्स के साथ उपयोग कर सकते हैं। तो यह वास्तव में आप पर निर्भर है।

+3

हां, लेकिन क्या कोई एक माइग्रेट कर सकता है Boost.Regex- आधारित प्रोग्राम C++ 11 Regex को सरल/बूस्ट ::/std ::/g' के साथ? –

+0

@Rob: मुझे कल्पना है कि आप Boost.Regex के आईसीयू समर्थन का उपयोग कर रहे हैं या नहीं। – ildjarn

7

एक बड़ा अंतर यह है कि सी ++ 11 नियमित अभिव्यक्तियों के लिए पर्ल सिंटैक्स प्रदान नहीं करता है। इसलिए, यदि आप पर्ल सिंटैक्स का उपयोग करते हैं तो आपको बूस्ट :: रेगेक्स लाइब्रेरी का उपयोग करना होगा।

+0

हां रेगेक्स के लिए पर्ल सिंटैक्स है: ईसीएमएस्क्रिप्ट रेगेक्स है और ईसीएमएस्क्रिप्ट रेगेक्स पर्ल रेगेक्स के समान है http://ecma-international.org/ecma-262/5.1/#sec-15.10 – BenjaminB

+5

@ Ubiquité आप सही नहीं हैं। आपके द्वारा प्रदान किया गया लिंक कहता है "इसके बाद मॉडलिंग"। [] के लिए [सी ++ टीआर 1 प्रस्ताव] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1429.htm#syntax_discussion) "इसी तरह के वाक्यांश" पर आधारित समान वाक्यांश का उपयोग करता है। ईसीएमएस्क्रिप्ट नियमित अभिव्यक्ति पर्ल नियमित अभिव्यक्तियों के समान नहीं हैं - पर्ल अधिक सुविधाएं और कुछ अलग वाक्यविन्यास प्रदान करता है। –

+1

@PatrickNiedzielski: आप सही हैं, दुर्भाग्य से बूस्ट। रेगेक्स ने 'ईसीएमएस्क्रिप्ट' के बराबर 'perl' परिभाषित किया है http://www.boost.org/doc/libs/1_53_0/libs/regex/doc/html/boost_regex/ref/ syntax_option_type/syntax_option_type_perl.html। – kennytm

0

कम से कम विजुअल स्टूडियो 2013 में और संबंधित नाम (cmatch, regex_match) दोनों नामस्थानों में समान हैं। उनके पास समान (या समान?) इंटरफ़ेस भी है।

तो आप केवल नामस्थान बदल सकते हैं और एक ही कोड चेतावनी और त्रुटियों के बिना किसी अन्य regex के साथ संकलित किया जाएगा। और यह बिल्कुल वही काम करना चाहिए।

पीएस मैं std :: regex पसंद करूंगा क्योंकि यह सी ++ 11 का हिस्सा है और boost :: regex एक तृतीय-पक्ष लाइब्रेरी है। मुझे यकीन है कि कुछ साल बाद, बूस्ट :: regex के लिए समर्थन हटा देगा।