के सभी संभावित मिलान कैसे प्राप्त करें मैं रेगेक्स के सभी संभावित मैचों को ढूंढना चाहता हूं, यह कैसे संभव है?std :: regex
regex rx("(2|25)");
string s = "2225";
for (sregex_iterator it(s.begin(), s.end(), rx), end; it != end; ++it) {
cout << it->position() << ": " << it->str() << endl;
}
उत्पादन देता है:
0: 2
1: 2
2: 25
लेकिन तीसरे 2: 2
बिल्कुल नहीं मिल रहा। मैं एक ही समय में कई टोकन खोजने के लिए O(n)
जटिलता के कारण रेगेक्स का उपयोग करना पसंद करता हूं।
अद्यतन:
हो सकता है कि गैर prefixable सूची में टोकन सूची विभाजित है और कई regexes बनाने? उदाहरण के लिए: (2|4|25|45|251|455|267)
=>(2|4)
, (25|45|267)
, (251|455)
इस जटिलता कुछ करने के लिए की तरह O(n log(m))
अद्यतन बढ़ेगा 2:
कृपया, गैर prefixable वैक्टर के बंटवारे टोकन वेक्टर की कमी एसटीएल आधारित एल्गोरिथ्म प्रदान इस प्रश्न का उत्तर दो।
यदि आप केवल '2' पर मैच चाहते हैं तो आप '| 25' का उपयोग क्यों करते हैं आपका रेगेक्स? – Phylogenesis
@ फिजोजेनेसिस मैं 'ओ (एन)' जटिलता के लिए सभी 4 मैचों की खोज करना चाहता हूं :) – k06a
मेरा मानना है कि आप एक ही चरित्र से दो अलग-अलग मिलान समूहों में मेल नहीं खा सकते हैं (यानी आप भाग के रूप में '2' से मिलान नहीं कर पाएंगे '25' लेकिन अपने आप पर भी)। – Phylogenesis