मेरे पास कुछ बड़ी फ़ाइलें हैं (सैकड़ों एमबी) जिन्हें मुझे कई हजार ~ 20-वर्ण अद्वितीय तारों की खोज करने की आवश्यकता है।वैकल्पिकता का उपयोग करके मैं कितने नियमित अभिव्यक्तियों को एक साथ जोड़ सकता हूं?
मैंने पाया कि (string1|string2|string3)
रेगुलर एक्सप्रेशन से मेल खाते के लिए पाइप प्रत्यावर्तन metacharacter का उपयोग कर खोज प्रक्रिया एक बहुत (एक समय में एक स्ट्रिंग के लिए खोज की तुलना में) को गति।
यह कैसे अच्छी तरह से स्केल करेगा करने के लिए सीमा क्या है? मैं इस तरह एक साथ कितनी अभिव्यक्ति कर सकता हूं? क्या यह किसी बिंदु पर किसी प्रकार का अतिप्रवाह पैदा करेगा? क्या ऐसा करने के लिए इससे अच्छा तरीका है?
संपादित
मेरे सवाल का संक्षिप्त रखने के प्रयास में, मैं तथ्य यह है कि मैं पहले से ही इस प्रत्यावर्तन दृष्टिकोण का उपयोग कर क्रियान्वित कर चुके हैं पर जोर नहीं था और मैं इसे उपयोगी हो पाया: एक टेस्ट केस पर एक सामान्य डेटा सेट के साथ, चलने का समय 87 मिनट से 18 सेकेंड तक घटा दिया गया - एक 290x स्पीडअप, जाहिर है ओ (एन * एम) के बजाय ओ (एन) के साथ।
मेरे सवाल यह है कि इस दृष्टिकोण जब अन्य उपयोगकर्ताओं बड़ा फ़ाइलें और अधिक खोज शब्दों के साथ बहुत बड़ा डेटा सेट का उपयोग भविष्य में इस कोड को चलाने के काम करने के लिए उम्मीद की जा सकती से संबंधित है। मूल ओ (एन * एम) कोड मौजूदा कोड था जो कि 13 वर्षों तक उपयोग में है, और इसकी नींद हाल ही में बताई गई थी क्योंकि जीनोम से संबंधित डेटा सेटों ने हाल ही में इसे बहुत बड़ा हासिल किया है।
आप इसे क्यों नहीं आज़माते हैं और हमें परिणाम बताते हैं? – Kevin
यह अजीब बात है: मेरे परिणाम बिल्कुल विपरीत थे, यह सिर्फ एक विकल्प के मुकाबले कई अलग-अलग खोज करने के लिए _much_ तेज था।क्या मैं आपको अपने कोड के बारे में कुछ और बताने का सुझाव दे सकता हूं? – raina77ow
[Regexp :: Assemble] में से एक का उपयोग करें (http://metacpan.org/module/Regexp::Assemble), [Regexp :: Trie] (http://metacpan.org/module/Regexp::Trie) , [रेगेक्स :: प्रीसफ] (http://metacpan.org/module/Regex::PreSuf) अधिक कुशल परिवर्तनों को इकट्ठा करने के लिए – obmib