Go में नियमित अभिव्यक्तियाँ उदाहरणों के साथ: व्यवहार में
\n\nनियमित अभिव्यक्तियाँ (regex) पैटर्न के अनुसार टेक्स्ट खोजने, निकालने और बदलने के लिए एक शक्तिशाली उपकरण हैं। Go (Golang) में इनके साथ काम करने के लिए मानक पैकेज regexp का उपयोग किया जाता है, जो एक कुशल और सुरक्षित API प्रदान करता है। इस लेख में, हम विशिष्ट उदाहरणों के साथ पैकेज की मुख्य क्षमताओं का विश्लेषण करेंगे, जो आपको वास्तविक परियोजनाओं में तुरंत ज्ञान लागू करने में मदद करेंगे।
Go में regexp पैकेज की मूल बातें
\n\nपैकेज regexp RE2 के अनुकूल नियमित अभिव्यक्तियों के सिंटैक्स को लागू करता है (बैकरेफरेंस और lookahead/lookbehind को छोड़कर)। यह इसे तेज़ और पूर्वानुमानित बनाता है। मुख्य कार्य:
- \n
regexp.Compile(pattern)— पैटर्न कोRegexpऑब्जेक्ट में संकलित करता है। यदि पैटर्न गलत है तो त्रुटि लौटाता है। \n regexp.MustCompile(pattern)— वही, लेकिन त्रुटि पर पैनिक कॉल करता है। स्थिर पैटर्न के लिए सुविधाजनक। \n MatchString(pattern, s)— जाँचता है कि स्ट्रिंगsमें पैटर्न से मेल खाने वाला सबस्ट्रिंग है या नहीं। \n
गतिशील पैटर्न (जैसे, उपयोगकर्ता इनपुट से) के लिए हमेशा Compile का उपयोग करें और कोड में हार्डकोडेड पैटर्न के लिए MustCompile का उपयोग करें।
package main\n\nimport (\n "fmt"\n "regexp"\n)\n\nfunc main() {\n // स्थिर पैटर्न के लिए MustCompile का उपयोग करें\n re := regexp.MustCompile(`hello`)\n match := re.MatchString("hello world")\n fmt.Println(match) // true\n\n // गतिशील पैटर्न के लिए Compile\n pattern := "[0-9]+"\n re2, err := regexp.Compile(pattern)\n if err != nil {\n fmt.Println("संकलन त्रुटि:", err)\n return\n }\n fmt.Println(re2.MatchString("abc123")) // true\n}\n\n\nडेटा खोजना और निकालना
\n\nअक्सर केवल मिलान की जाँच करने के बजाय स्ट्रिंग के विशिष्ट भागों को निकालने की आवश्यकता होती है। इसके लिए FindString, FindStringSubmatch और FindAllString विधियों का उपयोग किया जाता है।
पहला मिलान निकालना
\n\npackage main\n\nimport (\n "fmt"\n "regexp"\n)\n\nfunc main() {\n re := regexp.MustCompile(`\\d+`)\n text := "कोड: 12345, मूल्य: 678"\n \n // पहला मिलान\n first := re.FindString(text)\n fmt.Println(first) // 12345\n \n // सभी मिलान\n all := re.FindAllString(text, -1)\n fmt.Println(all) // [12345 678]\n}\n\n\nसमूह निकालना (submatches)
\n\nपैटर्न में समूह (गोल कोष्ठक द्वारा निरूपित) मिलान के भागों को निकालने की अनुमति देते हैं। FindStringSubmatch विधि एक स्लाइस लौटाती है, जहाँ पहला तत्व पूर्ण मिलान है, और बाद के तत्व समूहों के मान हैं।
package main\n\nimport (\n "fmt"\n "regexp"\n)\n\nfunc main() {\n // पैटर्न: उपयोगकर्ता नाम @डोमेन\n re := regexp.MustCompile(`(\\w+)@(\\w+\\.\\w+)`)\n email := "user@example.com"\n \n match := re.FindStringSubmatch(email)\n if len(match) > 0 {\n fmt.Println("पूरा ईमेल:", match[0]) // user@example.com\n fmt.Println("उपयोगकर्ता नाम:", match[1]) // user\n fmt.Println("डोमेन:", match[2]) // example.com\n }\n}\n\n\nFindAllStringSubmatch विधि स्ट्रिंग में सभी मिलानों के लिए ऐसा ही करती है।
नियमित अभिव्यक्तियों के साथ टेक्स्ट बदलना
\n\nपैकेज regexp प्रतिस्थापन के लिए दो विधियाँ प्रदान करता है: ReplaceAllString (सरल प्रतिस्थापन) और ReplaceAllStringFunc (फ़ंक्शन का उपयोग करके प्रतिस्थापन)।
सरल प्रतिस्थापन
\n\npackage main\n\nimport (\n "fmt"\n "regexp"\n)\n\nfunc main() {\n re := regexp.MustCompile(`\\s+`) // एक या अधिक रिक्त स्थान\n text := "Hello World Go"\n \n result := re.ReplaceAllString(text, " ")\n fmt.Println(result) // Hello World Go\n}\n\n\nसमूहों के साथ प्रतिस्थापन
\n\nप्रतिस्थापन स्ट्रिंग में संदर्भित किया जा सकता है