2011-02-28 18 views
6

से मिलान करने के लिए सबसे तेज़ रेगेक्स काफी सरल है। सबसे तेज़ रेगेक्स क्या है जो किसी भी इनपुट के लिए सच हो जाएगा?सी #। किसी भी स्ट्रिंग

संपादित करें: नीचे वोट क्यों? एक बहुत ही वैध सवाल की तरह लगता है। मैं एक फ़ंक्शन का उपयोग करता हूं जो रेगेक्स फ़िल्टर लेता है और मैं जानना चाहता हूं कि यह सबकुछ सबसे तेज़ी से कैसे मेल करेगा। "रेगेक्स का उपयोग नहीं करना" एक जवाब नहीं है।

+5

क्या आपने इस बारे में भी सोचा है? मैं एक चॉकलेट टीपोट के रूप में उपयोगी लगता है। –

+12

... रेगेक्स का उपयोग नहीं कर रहा है? –

+2

वास्तविक दुनिया परिदृश्य ने इस सवाल को कैसे प्रेरित किया? – Oded

उत्तर

4
class FastestRegex 
{ 
    public static readonly Regex RE = new Regex("", RegexOptions.Compiled); 
} 
+1

बस इसके बिल्ली के लिए एक नोट, लेकिन आप भी .NET आंतरिक Regex कैश का उपयोग कर सकते हैं और Regex – LorenVS

+0

@LorenVS पर स्थिर फ़ंक्शंस पर चिपके रह सकते हैं: यह इस बात पर निर्भर करता है कि आप कितने रेगेक्स बना रहे हैं और आप किस आकार में हैं रेगेक्स कैश के लिए सेट किया गया है। लेकिन आप ** जानते हैं ** इस पर पुन: उपयोग किया जा रहा है, तो इसे मैन्युअल रूप से कैश क्यों न करें? –

1

मैं कहूंगा कि यह जो कुछ

तरह
.*? 

किसी भी चरित्र के साथ एक मैच के लिए जाँच करेगा होना चाहिए था, लेकिन आलसी ऑपरेटर की वजह से, सभी में कोई स्ट्रिंग से मेल खाएगा। मुझे कल्पना है कि यह पहले चरित्र की जांच करने से पहले वापस आ जाएगा। यह माना जा रहा है कि खाली स्ट्रिंग सभी इनपुट के लिए सच नहीं होती है।

1

मुझे लगता है कि होता है कि या तो खाली स्ट्रिंग, "", या शुरू की इनपुट, "^", उसमें कोई स्ट्रिंग के लिए सबसे तेजी से (सकारात्मक) मैच में परिणाम होगा।

आपको इसे स्वयं आज़माएं हालांकि: कुछ त्वरित परीक्षण चलाना, पैटर्न "^" आमतौर पर ओरेकल के 1.6 जेआरई पर "" से अधिक तेज है, लेकिन मोनो 2.4 पर, यह दूसरी तरफ है। दोनों मामलों में, .*?रास्ता धीमा है।

लेकिन फिर से: अपने सिस्टम पर परीक्षण की चीजें।

0

कोई सबसे तेज़ रेगेक्स नहीं है जो कभी भी रेगेक्स नहीं चलाता है। इसलिए सबसे तेज़ रेगेक्स वह है जो वास्तव में चलता है। /[\S\s]?/ या, मुझे लगता है कि यह तेजी से /.?/s

एडन - /^/ पर इंटरस्टेस्टिंग हालांकि पर्ल में आंशिक रूप से तेज 30 मिलियन बार लूप किया गया है। हालांकि, सभी रेगेक्स को पहले संकलित करने से पहले उन्हें 5 के कारक से नीचे धीमा कर दिया जाता है। आंकड़े जाओ। शायद क्योंकि यह एक अभिव्यक्ति बहुत सरल है।

संबंधित मुद्दे