如何只从这个字符串获取链接?

use*_*109 1 regex swift

我想只从这个字符串中获取链接:

"<p><a href=\"https://www.youtube.com/watch?v=i2yscjyIBsk\">https://www.youtube.com/watch?v=i2yscjyIBsk</a></p>\n"
Run Code Online (Sandbox Code Playgroud)

我希望输出为 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 {????
}
Run Code Online (Sandbox Code Playgroud)

并尝试了这个正则表达式: "<a[^>]+href=\"(.*?)\"[^>]*>.*?</a>"

但我仍然无法弄明白.

vai*_*hav 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!)
}
Run Code Online (Sandbox Code Playgroud)

说明: NSDataDetector课程可以匹配日期,地址,链接,电话号码和公交信息.参考.

匹配内容的结果作为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)")
Run Code Online (Sandbox Code Playgroud)

输出:

string: https://www.youtube.com/watch?v=i2yscjyIBsk
Run Code Online (Sandbox Code Playgroud)

注意: 我建议您使用上面的解决方案来获取链接,特别感谢.

  • 我的意思是,对于`let string ="<p> <a href=\"https://www.google.com\">什么?? </a> </ p> \n"`你的代码将提取"什么??"而不是"https:// www.google.com". (2认同)