regex की हास्यास्पद बड़ी संख्या हास्केल के लिए इंजन मिलान के बावजूद, केवल एक ही मुझे लगता है कि होगा स्थानापन्नText.Regex
, जो है, जबकि सभ्य, कुछ बात याद आ रही है मैं PCRE से चाहते है पा सकते हैं। क्या कोई पिक्चर-आधारित पैकेज है जो प्रतिस्थापन करेगा, या क्या मैं इसके साथ अटक गया हूं?Haskell regex प्रतिस्थापन
उत्तर
रेगेक्स-बेस में नियमित अभिव्यक्ति API मिलान करने के लिए वर्णों के कंटेनर के लिए सामान्य है। प्रतिस्थापन लागू करने के लिए सामान्य रूप से किसी प्रकार का विभाजन करना कुशल बनाना मुश्किल होगा। मैं एक क्रैपी जेनेरिक दिनचर्या प्रदान नहीं करना चाहता था।
प्रतिस्थापन करने के लिए एक छोटा सा फ़ंक्शन लिखना वास्तव में एक बेहतर विचार है, और यह आपके कंटेनर से मेल खाने के लिए लिखा जा सकता है।
मुझे नहीं लगता कि "बस अपना खुद का रोल करें" वास्तविक कार्य करने की कोशिश करने वाले लोगों के लिए एक उचित उत्तर है, ऐसे क्षेत्र में जहां हर दूसरी आधुनिक भाषा ऐसा करने का एक छोटा तरीका है। योजना सहित। तो यहां कुछ वास्तविक संसाधन हैं; मेरा कोड एक प्रोजेक्ट से है जहां मैं qq "brackets" के अंदर सामान पर फ़ंक्शन को कॉल करने के आधार पर पाठ के साथ "qql foo bar baz qq" को प्रतिस्थापित करने का प्रयास कर रहा था, क्योंकि कारण।
सर्वश्रेष्ठ विकल्प: PCRE भारी:
let newBody = gsub [re|\s(qq[a-z]+)\s(.*?)\sqq\s|] (unWikiReplacer2 titles) body in do
[snip]
unWikiReplacer2 :: [String] -> String -> [String] -> String
unWikiReplacer2 titles match subList = case length subList > 0 of
True -> " --" ++ subList!!1 ++ "-- "
False -> match
ध्यान दें कि PCRE भारी सीधे किसी भी स्ट्रिंग प्रकार के साथ, समारोह आधारित प्रतिस्थापन का समर्थन करता है। बहुत अच्छा।
एक अन्य विकल्प:
let newBody = replaceAllPCRE "\\s(qq[a-z]+)\\s(.*?)\\sqq\\s" (unWikiReplacer titles) body in do
[snip]
unWikiReplacer :: [String] -> (PCRE.MatchResult String) -> String
unWikiReplacer titles mr = case length subList > 0 of
True -> " --" ++ subList!!1 ++ "-- "
False -> PCRE.mrMatch mr
where
subList = PCRE.mrSubList mr
-- A very simple, very dumb "replace all instances of this regex
-- with the results of this function" function. Relies on the
-- MatchResult return type.
--
-- https://github.com/erantapaa/haskell-regexp-examples/blob/master/RegexExamples.hs
-- was very helpful to me in constructing this
--
-- I also used
-- https://github.com/jaspervdj/hakyll/blob/ea7d97498275a23fbda06e168904ee261f29594e/src/Hakyll/Core/Util/String.hs
replaceAllPCRE :: String --^Pattern
-> ((PCRE.MatchResult String) -> String) --^Replacement (called on capture)
-> String --^Source string
-> String --^Result
replaceAllPCRE pattern f source =
if (source PCRE.=~ pattern) == True then
replaceAllPCRE pattern f newStr
else
source
where
mr = (source PCRE.=~ pattern)
newStr = (PCRE.mrBefore mr) ++ (f mr) ++ (PCRE.mrAfter mr)
किसी और के द्वारा ठीक: http://0xfe.blogspot.com/2010/09/regex-substitution-in-haskell.html
एक और एक, इस बार एक बड़ा पुस्तकालय में एम्बेडेड एक छोटे से समारोह है कि लेकिन काम करता है के साथ PCRE प्रकाश बिल्कुल performant नहीं है : https://github.com/jaspervdj/hakyll/blob/master/src/Hakyll/Core/Util/String.hs
इस उद्देश्य के लिए एक और पैकेज: https://hackage.haskell.org/package/pcre-utils
- 1. Emacs इंटरैक्टिव regex प्रतिस्थापन
- 2. Regex: नाम समूहों और प्रतिस्थापन
- 3. एकवचन प्रतिस्थापन के साथ regex एकाधिक पैटर्न
- 4. बैश में चर पर एकाधिक regex प्रतिस्थापन?
- 5. Haskell
- 6. Haskell
- 7. Haskell
- 8. Haskell
- 9. Haskell
- 10. Haskell
- 11. Haskell
- 12. नक्शा Haskell
- 13. एक चर में एक प्रतिस्थापन regex (खोज/प्रतिस्थापन) को कैसे सहेजने के लिए, qr //
- 14. शुद्ध सी में regex स्ट्रिंग प्रतिस्थापन कैसे करें?
- 15. हास्केल रेगेक्स पुस्तकालयों के साथ प्रतिस्थापन/प्रतिस्थापन
- 16. मेरी पहली Haskell कार्यक्रम
- 17. Haskell बहुरूपता और सूचियों
- 18. Haskell, चेनिंग फिल्टर
- 19. Emacs Haskell Mode Flymake
- 20. Haskell और स्ट्रिंग लंबाई
- 21. Haskell नेस्ट खाली सूचियों
- 22. Haskell से F # - F #
- 23. कैसे withFile Haskell
- 24. रेगेक्स मैच/प्रतिस्थापन पैटर्न
- 25. स्ट्रिंग प्रतिस्थापन - बुरा प्रतिस्थापन त्रुटि
- 26. जावा regexp समूहों प्रतिस्थापन
- 27. sed वाइल्डकार्ड प्रतिस्थापन
- 28. टर्मिनल चौड़ाई प्राप्त करें Haskell
- 29. गणित पैटर्न कानूनी Haskell हैं?
- 30. Haskell जादुई कोड, यहाँ क्या
अच्छा सवाल है, मैंने एक ही समस्या में भाग लिया है। –
ठीक है, स्क्रू करें, मैंने अपना खुद का टेक्स्ट 'टेक्स्ट.रेगेक्स.पीसीआरई.लाइट' पर आधारित लिखा है, हालांकि यह अधिकांश अन्य कार्यान्वयन के लिए अच्छी तरह से बंदरगाहों को बंद करता है। – muhmuhten
उत्तर के रूप में पोस्ट करें अगर यह समस्या हल करता है। – kennytm