Kotlin में Regular Expressions: व्यावहारिक उदाहरणों के साथ
\n\nRegular Expressions (regex) स्ट्रिंग्स के साथ काम करने का एक शक्तिशाली टूल है। Kotlin में, ये Java क्लासेस Pattern और Matcher पर आधारित हैं, लेकिन भाषा अपने स्वयं के सुविधाजनक एक्सटेंशन और सिंटैक्टिक शुगर भी जोड़ती है। इस लेख में, हम वास्तविक उदाहरणों के साथ Kotlin में Regular Expressions का उपयोग करना सीखेंगे: सरल खोज से लेकर रिप्लेसमेंट और स्ट्रिंग को विभाजित करने तक।
सिंटैक्स की मूल बातें: निर्माण और कंपाइलेशन
\n\nKotlin में Regular Expression बनाने के दो तरीके हैं: Regex क्लास के माध्यम से या पैटर्न वाली स्ट्रिंग का उपयोग करके। पहला तरीका बेहतर है, क्योंकि यह अधिक मेथड प्रदान करता है।
// तरीका 1: Regex क्लास के माध्यम से\nval regex = Regex("\\\\d+") // एक या अधिक अंक\n\n// तरीका 2: स्ट्रिंग के माध्यम से (जटिल एक्सप्रेशन के लिए अनुशंसित नहीं)\nval pattern = "\\\\d+".toRegex()\n\nडबल एस्केपिंग स्लैश पर ध्यान दें: \\\\d — यह Java/Kotlin के लिए एस्केपिंग है, ताकि स्ट्रिंग में \\d कैरेक्टर प्राप्त हो सके। सरलता के लिए, Kotlin raw स्ट्रिंग्स (ट्रिपल कोट्स """) को सपोर्ट करता है, जहां एस्केपिंग की आवश्यकता नहीं है:
val regex = Regex("""\\d+""") // raw स्ट्रिंग — बैकस्लैश को डुप्लिकेट करने की जरूरत नहीं\n\nआप फ्लैग भी जोड़ सकते हैं, जैसे RegexOption.IGNORE_CASE:
val regex = Regex("kotlin", RegexOption.IGNORE_CASE)\n\nमिलान खोजना और जांचना
\n\nसबसे आम ऑपरेशन हैं: यह जांचना कि क्या स्ट्रिंग में पैटर्न के अनुसार कोई सबस्ट्रिंग है, और सभी मिलान ढूंढना।
\n\nमिलान की उपस्थिति की जांच: containsMatchIn
\n\nval text = "मेरा नंबर: 123-45-678"\nval digitRegex = Regex("""\\d+""")\n\nif (digitRegex.containsMatchIn(text)) {\n println("टेक्स्ट में अंक हैं!")\n}\n\nपहला मिलान ढूंढना: find
\n\nval result = digitRegex.find(text)\nprintln(result?.value) // आउटपुट: 123\n\nसभी मिलान ढूंढना: findAll
\n\nval allMatches = digitRegex.findAll(text)\nallMatches.forEach { match ->\n println("मिला: ${match.value}") // 123, 45, 678\n}\n\nमेथड findAll MatchResult ऑब्जेक्ट्स का एक सीक्वेंस लौटाता है। प्रत्येक ऑब्जेक्ट में न केवल मिलान (.value) होता है, बल्कि स्ट्रिंग में उसकी स्थिति (.range) भी होती है।
कैप्चर ग्रुप्स के साथ काम करना
\n\nकैप्चर ग्रुप्स पैटर्न के वे हिस्से होते हैं जो गोल ब्रैकेट में बंद होते हैं। ये डेटा के विशिष्ट टुकड़ों को निकालने की अनुमति देते हैं। उदाहरण के लिए, ईमेल को यूज़रनेम और डोमेन में विभाजित करना:
\n\nval email = "user@example.com"\nval emailRegex = Regex("""(.+)@(.+)""")\nval matchResult = emailRegex.find(email)\n\nif (matchResult != null) {\n val (username, domain) = matchResult.destructured\n println("यूज़रनेम: $username") // user\n println("डोमेन: $domain") // example.com\n}\n\ndestructured कंस्ट्रक्शन ग्रुप्स को वेरिएबल्स में आसानी से विभाजित करता है। यदि अधिक ग्रुप्स हैं, तो इंडेक्स द्वारा एक्सेस किया जा सकता है:
val fullMatch = matchResult.value // user@example.com\nval group1 = matchResult.groupValues[1] // user\nval group2 = matchResult.groupValues[2] // example.com\n\nनामांकित ग्रुप्स (Kotlin 1.7+)
\n\nKotlin 1.7 से शुरू करके, आप नामांकित ग्रुप्स का उपयोग कर सकते हैं:
\n\nval namedRegex = Regex("""(?<name>\\w+)@(?<domain>\\w+\\.\\w+)""")\nval match = namedRegex.find("contact@kotlin.org")\nif (match != null) {\n println(match.groups["name"]?.value) // contact\n println(match.groups["domain"]?.value) // kotlin.org\n}\n\nreplace के साथ टेक्स्ट बदलना
\n\nमेथड replace सभी मिलानों को एक नई स्ट्रिंग से बदलने की अनुमति देता है। रिप्लेसमेंट पैटर्न में कैप्चर ग्रुप्स को संदर्भित किया जा सकता है।