You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 4中提取网页特定HTML标签的最优方案咨询

最优方案:用HTML解析库而非正则表达式

嘿,关于在Swift 4里提取特定HTML标签内容的问题,我得先给你提个醒:尽量别用正则表达式处理HTML。HTML的结构太灵活了——标签里可能混着其他属性、换行、嵌套元素,正则很容易因为这些细节匹配失败,维护起来也头疼。

更靠谱的方式是用专门的HTML解析库,比如SwiftSoup,它是针对Swift打造的,和Java里的Jsoup一脉相承,处理HTML标签非常顺手。

步骤1:替换过时的NSURLConnection

首先,Swift 4里NSURLConnection已经被标记为过时了,建议换成URLSession来获取网页数据,代码更简洁也更符合现代Swift的用法:

guard let url = URL(string: "你的网页URL") else { return }
let task = URLSession.shared.dataTask(with: url) { data, response, error in
    guard let data = data, error == nil else {
        print("获取数据失败:\(error?.localizedDescription ?? "未知错误")")
        return
    }
    guard let htmlString = String(data: data, encoding: .utf8) else {
        print("转码失败")
        return
    }
    // 这里调用解析逻辑
    self.parseHTML(with: htmlString)
}
task.resume()

步骤2:用SwiftSoup解析目标标签

先通过CocoaPods安装SwiftSoup:在Podfile里添加pod 'SwiftSoup',然后执行pod install。

然后写解析函数:

func parseHTML(with htmlString: String) {
    do {
        let doc = try SwiftSoup.parse(htmlString)
        // 查找所有class为results的p标签
        let resultsElements = try doc.select("p.results")
        for element in resultsElements {
            // 获取标签内的纯文本内容(自动去除嵌套标签)
            let content = try element.text()
            print("提取到的内容:\(content)")
            // 如果需要保留标签内的HTML结构,用element.html()
            // let htmlContent = try element.html()
        }
    } catch {
        print("解析失败:\(error.localizedDescription)")
    }
}

为什么不推荐正则?

如果非要用正则,你可能会写出类似这样的表达式:

let pattern = "<p class=\"results\">(.*?)</p>"
if let regex = try? NSRegularExpression(pattern: pattern, options: .dotMatchesLineSeparators) {
    let matches = regex.matches(in: htmlString, options: [], range: NSRange(location: 0, length: htmlString.utf16.count))
    for match in matches {
        if let range = Range(match.range(at: 1), in: htmlString) {
            let content = htmlString[range]
            print(content)
        }
    }
}

但这个写法有很多隐患:比如如果p标签里有其他属性(比如<p class="results" id="test">)、标签换行写、或者嵌套了其他标签(比如<p class="results"><span>文本</span></p>),正则就会匹配失败或者提取出错误内容。

总结

最优方式绝对是用SwiftSoup这类专业的HTML解析库,它能正确处理HTML的各种结构,代码可读性和可维护性都比正则高太多。

内容的提问来源于stack exchange,提问作者OverBurned

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:51:24