यहां तक कि अगर matchesInString()
विधि String
पहले तर्क के रूप में लेती है , तो यह आंतरिक रूप से काम करती है NSString
, और रेंज पैरामीटर को NSString
लंबाई का उपयोग करके दिया जाना चाहिए और स्विफ्ट स्ट्रिंग लंबाई के रूप में नहीं। अन्यथा यह "विस्तारित अंगूर के समूहों" जैसे "झंडे" के लिए विफल हो जाएगा।
के रूप में स्विफ्ट 4 (Xcode 9), स्विफ्ट मानक पुस्तकालय कार्यों के बीच परिवर्तित करने के लिए प्रदान करता है Range<String.Index>
और NSRange
।
func matches(for regex: String, in text: String) -> [String] {
do {
let regex = try NSRegularExpression(pattern: regex)
let results = regex.matches(in: text,
range: NSRange(text.startIndex..., in: text))
return results.map {
String(text[Range($0.range, in: text)!])
}
} catch let error {
print("invalid regex: \(error.localizedDescription)")
return []
}
}
उदाहरण:
let string = "🇩🇪€4€9"
let matched = matches(for: "[0-9]", in: string)
print(matched)
// ["4", "9"]
नोट: जबरन जारी किया गया स्क्रैप Range($0.range, in: text)!
सुरक्षित है क्योंकि NSRange
दिए गए स्ट्रिंग के एक विकल्प को संदर्भित करता है text
। हालाँकि, अगर आप इससे बचना चाहते हैं तो उपयोग करें
return results.flatMap {
Range($0.range, in: text).map { String(text[$0]) }
}
बजाय।
(स्विफ्ट 3 और इससे पहले का पुराना उत्तर :)
तो आपको दिए गए स्विफ्ट स्ट्रिंग को एक में बदलना चाहिए NSString
और फिर पर्वतमाला को निकालना चाहिए। परिणाम स्वचालित रूप से एक स्विफ्ट स्ट्रिंग सरणी में परिवर्तित हो जाएगा।
(स्विफ्ट 1.2 का कोड संपादन इतिहास में पाया जा सकता है।)
स्विफ्ट 2 (Xcode 7.3.1):
func matchesForRegexInText(regex: String, text: String) -> [String] {
do {
let regex = try NSRegularExpression(pattern: regex, options: [])
let nsString = text as NSString
let results = regex.matchesInString(text,
options: [], range: NSMakeRange(0, nsString.length))
return results.map { nsString.substringWithRange($0.range)}
} catch let error as NSError {
print("invalid regex: \(error.localizedDescription)")
return []
}
}
उदाहरण:
let string = "🇩🇪€4€9"
let matches = matchesForRegexInText("[0-9]", text: string)
print(matches)
// ["4", "9"]
स्विफ्ट 3 (Xcode 8)
func matches(for regex: String, in text: String) -> [String] {
do {
let regex = try NSRegularExpression(pattern: regex)
let nsString = text as NSString
let results = regex.matches(in: text, range: NSRange(location: 0, length: nsString.length))
return results.map { nsString.substring(with: $0.range)}
} catch let error {
print("invalid regex: \(error.localizedDescription)")
return []
}
}
उदाहरण:
let string = "🇩🇪€4€9"
let matched = matches(for: "[0-9]", in: string)
print(matched)
// ["4", "9"]