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

含\r\n时NSRegularExpression匹配<>标签异常问题

问题原因及解决方法

核心原因是NSRange的创建方式错误:你用NSRange(location: 0, length: s.count)指定匹配范围,但Swift的String.count统计的是Unicode字符(扩展字素簇)的数量,而NSRange的length参数需要的是UTF-16编码的代码单元数。两者在字符串包含多UTF-16单元字符(如Emoji、复合字符)时数值会不一致;即使你的字符串是ASCII字符,这种写法也可能因换行符的间接影响,导致正则只能处理字符串前半部分,进而漏匹配结果。

解决方法

改用Swift字符串索引创建正确的NSRange:

let s = "TEST \r\n\r\n&lt;strong&gt;more:&lt;/strong&gt;"
let re = try! NSRegularExpression(pattern: "&lt;.*?&gt;")
// 基于字符串索引生成正确的NSRange
let range = NSRange(s.startIndex..., in: s)
let matches = re.matches(in: s, range: range)

执行这段代码就能得到预期的2个匹配结果。

补充说明:NSRegularExpression默认不允许.匹配\n(换行符),但会匹配\r(回车符),不过这不是本次问题的诱因,核心还是范围计算错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:02:53