2012-04-18 23 views
9

लेख के अनुसार this article पढ़ने के बाद दो अलग-अलग प्रकार के नियमित अभिव्यक्ति एल्गोरिदम (पर्ल 5.8.7 और थॉम्पसन एनएफए), बाद में ~ 1,000,000 गुना तेज है। मैं प्रतिदिन PHP का उपयोग करता हूं, और रेगेक्स का बहुत उपयोग करता हूं, इसलिए मैं जानना चाहता था कि कौन सा एल्गोरिदम PHP उपयोग करता है।कौन सा नियमित अभिव्यक्ति एल्गोरिदम PHP का उपयोग करता है?

मुझे this question मिला, हालांकि यह केवल जावास्क्रिप्ट के लिए है। उत्तरों में से एक का कहना है कि जावास्क्रिप्ट थॉम्पसन एनएफए एल्गोरिदम का उपयोग करता है, लेकिन यह निश्चित रूप से कार्यान्वयन से कार्यान्वयन में भिन्न होगा। मुझे लगता है कि PHP ने तेजी से एल्गोरिदम का उपयोग करने के लिए स्विच किया होगा जब यह PCRE कार्यों के सेट पर स्थानांतरित हो गया था, ereg_* सामान को हटा दिया गया था।

मैंने PHP PCRE documentation पर देखा है और जहां तक ​​मैं देख सकता हूं, यह मुझे कुछ भी बताता है कि यह किस एल्गोरिदम का उपयोग करता है। मेरे लिए PCRE संक्षिप्त नाम, मुझे बताता है कि यह Perl Compatible Regular Expressions का उपयोग करता है, इसलिए मुझे लगता है कि यह पर्ल शैली एल्गोरिदम का उपयोग करता है।

कौन सा नियमित अभिव्यक्ति एल्गोरिदम PHP का उपयोग करता है? क्या यह "पर्ल 5.8.7 स्टाइल" है, या क्या यह बहुत तेजी से थॉम्पसन एनएफए एल्गोरिदम का उपयोग करता है, या कोई दूसरा पूरी तरह से? क्या यह अपने अभिव्यक्तियों को चलाने के लिए एक पर्ल बैकएंड का भी उपयोग कर सकता है?

यदि PHP एक पर्ल शैली एल्गोरिदम का उपयोग करता है, तो यह वास्तव में क्या है? मैं अन्य एल्गोरिदम के संबंध में एक सार परिभाषा/स्पष्टीकरण की तलाश में हूं।

+2

आप सही हैं, पीसीआरई पर्ल-संगत नियमित अभिव्यक्तियों के लिए खड़ा है। हालांकि, यह एक एल्गोरिदम नहीं है। – BoltClock

+2

पीसीआरई आमतौर पर [पिक्चर लाइब्रेरी] (http://en.wikipedia.org/wiki/Pcre) का मतलब है, हालांकि, जो पीछे-प्रतिस्थापन पर्ल-शैली एल्गोरिदम का उपयोग करता है। आईआईआरसी एनएफए दृष्टिकोण केवल विशाल डेटासेट पर सामान्य प्रकार के प्रश्नों के लिए बड़े प्रदर्शन लाभ देखता है; 1,000,000 बार ठेठ अनुप्रयोगों के लिए नाटकीय अतिस्थापन है। – Dougal

+1

ध्यान दें कि उस आलेख के लेखक ने ['re2'] (http://code.google.com/p/re2/) नामक एक लाइब्रेरी लागू की है, जो पारंपरिक नियमित अभिव्यक्तियों का उपयोग करती है और इसलिए कुछ इनपुट पर तेज़ी से बढ़ती है, खासकर बड़े । ['php-re2'] (https://github.com/arraypad/php-re2) PHP बाइंडिंग का एक सेट' re2' है; मुझे कोई जानकारी नहीं है कि यह अच्छा है या नहीं। – Dougal

उत्तर

5

मैनुअल से:

http://www.php.net/pcre:

रेगुलर एक्सप्रेशन (पर्ल-संगत)

http://www.php.net/manual/en/intro.pcre.php:

PCRE पुस्तकालय का एक सेट है काम करता है कि लागू करता है टी अभिव्यक्ति पैटर्न उसी वाक्यविन्यास और सेमेन्टिक्स का उपयोग करके पर्ल 5 के रूप में मिलान कर रहा है, केवल कुछ अंतर (नीचे देखें) के साथ। वर्तमान कार्यान्वयन पर्ल 5.005 से मेल खाता है।

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