Regex 如何从swift文本中提取所有电子邮件地址

Regex 如何从swift文本中提取所有电子邮件地址,regex,swift,Regex,Swift,我有一条短信 var txt=+abc@gmail.com你好酷+def@gmail.com 我想从文本中提取电子邮件地址并将其存储在数组中。我想用正则表达式来做。我找到了正则表达式,但无法将电子邮件保存到数组中 我试过了 let regEx = "/(\\+[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)/gi" if let email = NSPredicate(format: "SELF MATCHES %@", regEx) {

我有一条短信

var txt=+abc@gmail.com你好酷+def@gmail.com

我想从文本中提取电子邮件地址并将其存储在数组中。我想用正则表达式来做。我找到了正则表达式,但无法将电子邮件保存到数组中

我试过了

let regEx = "/(\\+[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)/gi"
if let email = NSPredicate(format: "SELF MATCHES %@", regEx) {
        //what to do here
}
还是我做错了? 我知道这是一个基本问题。请帮忙


提前谢谢。

看起来您的正则表达式名称不对。您将其声明为正则表达式,但在NSPredicate中使用的是emailRegEx。

看起来您的正则表达式名称是错误的。您将其声明为regEx,但在NSPredicate中使用的是emailRegEx。

我建议使用NSRegularExpression类而不是NSPredicate。正则表达式的格式来自

以下是一种方法:

let pattern = "(\\+[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)"
let regexp = NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive, error: nil)

let str = "+abc@gmail.com heyyyyy cool +def@gmail.com" as NSString

var results = [String]()
regexp?.enumerateMatchesInString(str, options: NSMatchingOptions(0), range: NSRange(location: 0, length: str.length), usingBlock: { (result: NSTextCheckingResult!, _, _) in
    results.append(str.substringWithRange(result.range))
})

// Gives [+abc@gmail.com, +def@gmail.com]
我建议使用NSRegularExpression类而不是NSPredicate。正则表达式的格式来自

以下是一种方法:

let pattern = "(\\+[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)"
let regexp = NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive, error: nil)

let str = "+abc@gmail.com heyyyyy cool +def@gmail.com" as NSString

var results = [String]()
regexp?.enumerateMatchesInString(str, options: NSMatchingOptions(0), range: NSRange(location: 0, length: str.length), usingBlock: { (result: NSTextCheckingResult!, _, _) in
    results.append(str.substringWithRange(result.range))
})

// Gives [+abc@gmail.com, +def@gmail.com]

这些代码对我有用。您可以从中签出电子邮件正则表达式


这些代码对我有用。您可以从中签出电子邮件正则表达式


你的邮件地址需要加号吗

地址中没有+符号:

[a-zA-Z0-9.\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z0-9.\]+

结果:[abc@gmail.com, def@gmail.com]

在地址中使用+符号:

[\\+a-zA-Z0-9.\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z0-9.\]+


结果:[+abc@gmail.com, +def@gmail.com]您需要邮件地址中的加号吗

地址中没有+符号:

[a-zA-Z0-9.\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z0-9.\]+

结果:[abc@gmail.com, def@gmail.com]

在地址中使用+符号:

[\\+a-zA-Z0-9.\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z0-9.\]+


结果:[+abc@gmail.com, +def@gmail.com]以下是我创建的字符串扩展,用于从中提取电子邮件,在swift 4中运行良好

 extension String {    
  func getEmails() -> [String] {
    if let regex = try? NSRegularExpression(pattern: "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}", options: .caseInsensitive)
    {
        let string = self as NSString
        
        return regex.matches(in: self, options: [], range: NSRange(location: 0, length: string.length)).map {
            string.substring(with: $0.range).lowercased()
        }
    }
    return []
  }
}
用法


//结果[adil@gmail.com, fraz@gmail.pk, janesmit@precisiencenstruction.com]以下是我创建的字符串扩展,用于从中提取电子邮件,在swift 4中运行良好

 extension String {    
  func getEmails() -> [String] {
    if let regex = try? NSRegularExpression(pattern: "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}", options: .caseInsensitive)
    {
        let string = self as NSString
        
        return regex.matches(in: self, options: [], range: NSRange(location: 0, length: string.length)).map {
            string.substring(with: $0.range).lowercased()
        }
    }
    return []
  }
}
用法

//结果[adil@gmail.com, fraz@gmail.pk, janesmit@precisiencenstruction.com]

为什么.ReplacingOccurrencesf:,with:为什么.ReplacingOccurrencesf:,with: