我想只获取此字符串中的链接:
"<p><a href=\"https://www.youtube.com/watch?v=i2yscjyIBsk\">https://www.youtube.com/watch?v=i2yscjyIBsk</a></p>\n"
我希望输出为https://www.youtube.com/watch?v=i2yscjyIBsk
那么,我怎么能实现呢?
我试过了:
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 {
}
尝试了这个正则表达式:"<a[^>]+href=\"(.*?)\"[^>]*>.*?</a>"
但我仍然无法弄清楚。
答案 0 :(得分:6)
通过使用NSDataDetector
类,您可以准确地提取链接:
let text = "<p><a href=\"https://www.youtube.com/watch?v=i2yscjyIBsk\">https://www.youtube.com/watch?v=i2yscjyIBsk</a></p>\n"
let types: NSTextCheckingType = .Link
let detector = try? NSDataDetector(types: types.rawValue)
guard let detect = detector else {
return
}
let matches = detect.matchesInString(text, options: .ReportCompletion, range: NSMakeRange(0, text.characters.count))
for match in matches {
print(match.URL!)
}
说明: NSDataDetector
课程可以匹配日期,地址,链接,电话号码和公交信息。 Reference 的
匹配内容的结果将作为NSTextCheckingResult
个对象返回。但是,NSTextCheckingResult
返回的NSDataDetector
个对象与基类NSRegularExpression
返回的对象不同。
NSDataDetector
返回的结果将是其中一种数据检测器类型,具体取决于返回的结果类型,它们将具有相应的属性。例如,日期类型的结果具有日期timeZone
和持续时间;类型链接的结果有url
,依此类推。
还有另一种方法可以在<a> ... </a>
标记:
let string = "<p><a href=\"https://www.youtube.com/watch?v=i2yscjyIBsk\">https://www.youtube.com/watch?v=i2yscjyIBsk</a></p>\n"
let str = string.stringByReplacingOccurrencesOfString("<[^>]+>", withString: "", options: .RegularExpressionSearch, range: nil)
print("string: \(str)")
输出:
string: https://www.youtube.com/watch?v=i2yscjyIBsk
注意: 我建议您使用上述解决方案特别感谢链接。