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

如何在 macOS 平台使用 Swift 提取两个大括号之间的内容

问题原因

你的正则使用默认贪婪匹配规则,.*会尽可能匹配最长的字符序列,会从字符串第一个{开始一直匹配到目标邮箱的位置,中间会跨过其他无关的大括号片段,因此输出结果不符合预期。同时没有对邮箱内容做正则转义,若邮箱包含.、+等正则特殊字符时会出现匹配错误。

修正方案

将正则的匹配内容限制在单个大括号内部,同时对邮箱做转义处理即可。
修正后的完整代码如下:

let email = "abcd@gmail.com"
let content = "{any string content efgh@yahoo.com any string content} {any string content abcd@gmail.com any string content}{any string content klmn@yahoo.com any string content}"

// 先对邮箱做正则转义,避免特殊字符影响匹配
let escapedEmail = NSRegularExpression.escapedPattern(for: email)
// 用[^{}]匹配非大括号的字符,保证不会跨越大括号范围
let regex = try NSRegularExpression(pattern: "\\{([^{}]*\(escapedEmail)[^{}]*)\\}")
let matches = regex.matches(in: content, range: NSRange(content.startIndex..., in: content))
for match in matches {
    let swiftRange = Range(match.range(at: 1), in: content)!
    print(content[swiftRange]) 
    // 输出:any string content abcd@gmail.com any string content
}
说明
  • [^{}] 表示匹配任意不是{和}的字符,因此匹配范围只会限定在单个大括号内部,不会出现跨片段匹配的问题
  • NSRegularExpression.escapedPattern(for:) 会自动转义字符串中的正则特殊字符,保证邮箱会被当成普通字符串匹配

内容的提问来源于stack exchange,提问作者Kênh Vui Để Học

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:45:04