如何从此字符串中仅获取链接?
Posted
技术标签:
【中文标题】如何从此字符串中仅获取链接?【英文标题】:How to get only link from this string? 【发布时间】:2016-11-25 07:55:38 【问题描述】:我只想从此字符串中获取链接:
"<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>"
但我还是想不通。
【问题讨论】:
What is the best practice to parse html in swift?的可能重复 【参考方案1】:通过使用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
对象返回。但是NSDataDetector
返回的NSTextCheckingResult
对象与基类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
注意: 我建议您使用上述解决方案来获取链接,特别感谢。
【讨论】:
请注意,这不会提取链接目标(锚点中的href),而是提取<a ..>
和</a>
之间的文本。该文本不必是链接,也不必等于 href。
@MartinR 我在这里尊重您的正确解释,我在我的情况下找到了这个可行的解决方案,这也是我建议的原因。你能详细说明一下这个That text need not be a link and need not be equal to the href
,所以我会更新我并提出建议:)
我的意思是,对于let string = "<p><a href=\"https://www.google.com\">What??</a></p>\n"
,您的代码将提取What??
而不是https://www.google.com
。
好的现在明白你的意思<a> ... </a>
,我会寻找更好的解决方案,很高兴你能提供一些链接非常感谢:)以上是关于如何从此字符串中仅获取链接?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 REGEXP sql 从字符串中仅提取 5 位数字
如何使用 jquery 从 asp.net 列表框中仅获取当前选定的选项