मैं एक नियमित अभिव्यक्ति का उपयोग कर इनपुट स्ट्रिंग को पार्स करने की कोशिश कर रहा हूं। दोहराने वाले समूह को पकड़ने की कोशिश करते समय मुझे समस्या हो रही है। मैं हमेशा समूह के आखिरी उदाहरण से मेल खाता प्रतीत होता हूं। मैंने अनिच्छुक (गैर लालची) क्वांटिफायर का उपयोग करने की कोशिश की है, लेकिन मुझे कुछ याद आ रहा है। क्या कोई मदद कर सकता है?बूस्ट :: regex_search के साथ दोहराने वाले समूह के सभी मैचों को कैप्चर कैसे करूं?
नियमित अभिव्यक्ति की कोशिश की:
(OS)\\s((\\w{3})(([A-Za-z0-9]{2})|(\\w{3})(\\w{3}))\\/{0,1}){1,5}?\\r
(OS)\\s((\\w{3}?)(([A-Za-z0-9]{2}?)|(\\w{3}?)(\\w{3}?))\\/{0,1}?){1,5}?\\r
इनपुट स्ट्रिंग:
OS BENKL/LHRBA/MANQFL\r\n
मैं हमेशा पिछले समूह जो MANQFL समूह (MAN QFL)
है, और मेरे उद्देश्य सभी तीन समूहों प्राप्त करने के लिए है पाने के लिए लग रहे हैं (वहाँ कर सकते हैं 1-5 हो समूहों):
(BEN KL) , (LHR BA) and (MAN QFL).
सी ++ कोड स्निपेट:
std::string::const_iterator start = str.begin(), end = str.end();
while(regex_search(start,end,what,expr))
{
cout << what[0];
cout << what[1];
...
start += what.position() + what.length();
}
यह लूप केवल एक बार निकलता है, जबकि मुझे उम्मीद है कि यह इस उदाहरण में 3 बार चलने की उम्मीद है। किसी भी प्रकार के मदद की बहुत सराहना की जाएगी।
यदि आप हमें इनपुट के प्रारूप के बारे में और बताएंगे कि आप इसे कैसे पार्स करना चाहते हैं तो यह बहुत मदद करेगा। –
इनपुट स्ट्रिंग स्ट्रीम है, और इस उदाहरण में मुझे 3 समूह (बेन केएल), (एलएचआर बीए) और (मैन क्यूएफएल) प्राप्त करने की उम्मीद है। मुझे इस मामले में पता है कि हम नियमित अभिव्यक्तियों का उपयोग किए बिना भी कर सकते हैं, लेकिन मैं यह देखने की कोशिश कर रहा हूं कि क्या मैं इसे मौजूदा कोड के साथ संगत रख सकता हूं जहां रेगेक्स का उपयोग किया जाता है। – omshanti