Swift में रेगुलर एक्सप्रेशन: टेक्स्ट के साथ काम करने के लिए एक शक्तिशाली उपकरण
रेगुलर एक्सप्रेशन (regex) iOS और macOS डेवलपर्स के लिए एक अपरिहार्य उपकरण है। यह कॉम्पैक्ट पैटर्न की मदद से टेक्स्ट डेटा की जटिल खोज, प्रतिस्थापन और मान्यता (वैलिडेशन) करने की अनुमति देता है। Swift में, रेगुलर एक्सप्रेशन के साथ काम Foundation framework के NSRegularExpression क्लास के माध्यम से कार्यान्वित किया जाता है। इस लेख में, हम Swift में regex के उपयोग के सभी पहलुओं पर चर्चा करेंगे: बुनियादी सिंटैक्स से लेकर उन्नत तकनीकों तक, iOS और macOS अनुप्रयोगों के लिए व्यावहारिक उदाहरणों के साथ।
Swift में NSRegularExpression की मूल बातें
Swift में रेगुलर एक्सप्रेशन के साथ काम करने के लिए NSRegularExpression क्लास का उपयोग किया जाता है। यह स्ट्रिंग्स से डेटा खोजने, बदलने और निकालने के लिए शक्तिशाली तरीके प्रदान करता है। आइए इनिशियलाइज़ेशन के मूल सिंटैक्स को देखें:
import Foundation
let pattern = "\\\\d{3}-\\\\d{2}-\\\\d{4}" // SSN के लिए पैटर्नlet text = "मेरा SSN: 123-45-6789"
do { let regex = try NSRegularExpression(pattern: pattern) let results = regex.matches(in: text, range: NSRange(text.startIndex..., in: text)) for match in results { let range = Range(match.range, in: text)! print("मिला: \\(text[range])") }} catch { print("रेगुलर एक्सप्रेशन में त्रुटि: \\(error.localizedDescription)")}Swift स्ट्रिंग्स में बैकस्लैश को एस्केप करने पर ध्यान दें। पैटर्न में प्रत्येक बैकस्लैश के लिए, आपको दो लगाने होंगे (\\d के बजाय \\\\d)।
रेगुलर एक्सप्रेशन बनाना और कॉन्फ़िगर करना
NSRegularExpression कंस्ट्रक्टर एक वैकल्पिक पैरामीटर options लेता है, जो regex के व्यवहार को कॉन्फ़िगर करने की अनुमति देता है:
.caseInsensitive— अक्षरों के केस (ऊपरी/निचला) को अनदेखा करें.dotMatchesLineSeparators— डॉट (.) लाइन ब्रेक कैरेक्टर से मेल खाता है.anchorsMatchLines— एंकर ^ और $ प्रत्येक पंक्ति के लिए काम करते हैं.useUnixLineSeparators— लाइन सेपरेटर के रूप में केवल का उपयोग करें
let regex = try NSRegularExpression( pattern: "swift", options: [.caseInsensitive])// अब पैटर्न "Swift", "SWIFT", "swift" आदि को ढूंढेगा।regex का उपयोग करके डेटा खोजना और निकालना
रेगुलर एक्सप्रेशन के मुख्य कार्यों में से एक उन सबस्ट्रिंग्स को ढूंढना है जो पैटर्न से मेल खाती हैं। Swift में, यह matches(in:options:range:) विधि के माध्यम से किया जाता है।
सभी मिलान खोजना
let text = "संपर्क: email@example.com, support@test.org, admin@site.com"let emailPattern = "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,}"
let regex = try NSRegularExpression(pattern: emailPattern)let matches = regex.matches(in: text, range: NSRange(text.startIndex..., in: text))
print("ईमेल मिले: \\(matches.count)")for match in matches { if let range = Range(match.range, in: text) { print(String(text[range])) }}// आउटपुट:// ईमेल मिले: 3// email@example.com// support@test.org// admin@site.comग्रुप कैप्चर के साथ खोज
गोल कोष्ठक () में समूह आपको मिलान के कुछ हिस्सों को निकालने की अनुमति देते हैं। यह संरचित डेटा को पार्स करने के लिए विशेष रूप से उपयोगी है:
let logLine = "2024-01-15 14:30:22 [ERROR] सर्वर से कनेक्ट करने में विफल"let logPattern = "(\\\\d{4}-\\\\d{2}-\\\\d{2}) (\\\\d{2}:\\\\d{2}:\\\\d{2}) \\\\[(\\\\w+)\\\\] (.+)"
let regex = try NSRegularExpression(pattern: logPattern)if let match = regex.firstMatch(in: logLine, range: NSRange(logLine.startIndex..., in: logLine)) { let dateRange = Range(match.range(at: 1), in: logLine)! let timeRange = Range(match.range(at: 2), in: logLine)! let levelRange = Range(match.range(at: 3), in: logLine)! let messageRange = Range(match.range(at: 4), in: logLine)! print("दिनांक: \\(logLine[dateRange])") print("समय: \\(logL
```