मैंने लिखा/regex-base, regex-pcre, और regex-tdfa के रूप में इस तरह के पैकेज बनाए रखें।
रीजिक्स-बेस Text.Regex.Base.Context मॉड्यूल दस्तावेजों में RegexContext की बड़ी संख्या के उदाहरण = ~ उपयोग करता है। ये RegexLike के शीर्ष पर लागू किए गए हैं जो matchText और matchAllText को कॉल करने के लिए अंतर्निहित तरीका प्रदान करते हैं।
[[स्ट्रिंग]] कि केनीटीएम उल्लेख रेगेक्स कॉन्टेक्स्ट का एक और उदाहरण है, और हो सकता है कि वह आपके लिए सबसे अच्छा काम न करे।
let x :: Array Int (MatchText String)
x = getAllTextMatches $ "xyz abc" =~ "(\\w+) \\w+"
, जिसके आधार पर एक्स समूह-मैचों में से किसी सरणी इंट के मैचों में से किसी सरणी इंट है: एक व्यापक उदाहरण
RegexContext a b (AllTextMatches (Array Int) (MatchText b))
type MatchText source = Array Int (source, (MatchOffset, MatchLength))
जो सब कुछ के लिए एक MatchText प्राप्त करने के लिए इस्तेमाल किया जा सकता है।
ध्यान दें कि "\ w" पर्ल सिंटैक्स है इसलिए आपको इसे एक्सेस करने के लिए regex-pcre की आवश्यकता है। यदि आप यूनिक्स/पॉज़िक्स को नियमित अभिव्यक्तियों को विस्तारित करना चाहते हैं तो आपको रेगेक्स-टीडीएफए का उपयोग करना चाहिए जो क्रॉस-प्लेटफ़ॉर्म है और regex-posix का उपयोग करने से बचें जो regex.h लाइब्रेरी को लागू करने में प्रत्येक प्लेटफ़ॉर्म की बग को हिट करता है।
ध्यान दें कि पर्ल बनाम पॉज़िक्स सिर्फ "\ w" जैसे सिंटैक्स का मामला नहीं है। वे बहुत अलग एल्गोरिदम का उपयोग करते हैं और अक्सर अलग-अलग परिणाम लौटाते हैं। इसके अलावा, समय और अंतरिक्ष जटिलता बहुत अलग हैं। लम्बाई 'एन' पर्ल शैली (रेगेक्स-पिक्चर) की स्ट्रिंग के खिलाफ मिलान करने के लिए समय में ओ (एक्सपी (एन)) हो सकता है जबकि रीजिक्स-पॉजिक्स का उपयोग कर पॉज़िक्स शैली हमेशा समय में ओ (एन) होती है।
स्रोत
2011-04-08 07:04:23