2015-02-18 3 views
1

У меня есть текстовыйКак извлечь все адреса электронной почты из текста в быстрых

уаг TXT = «[email protected] heyyyyy круто [email protected]»

Я хочу, чтобы извлечь электронную почту адрес из текста и сохранить его в массиве. Я хочу сделать это с регулярным выражением. Я нашел регулярное выражение, но я не могу сохранить электронную почту в массив.

я попытался

let regEx = "/(\\+[a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)/gi" 
if let email = NSPredicate(format: "SELF MATCHES %@", regEx) { 
     //what to do here 
} 

Или я делаю неправильно? Я знаю, что это основной вопрос. Пожалуйста, помогите

Заранее спасибо.

ответ

0

Похоже, что ваше имя в регулярном выражении неверно. Вы объявляете его regEx, но в своем NSPredicate вы используете emailRegEx.

+0

ошибка ввода ... – user2413621

3

Я рекомендую использовать класс NSRegularExpression вместо NSPredicate. Формат регулярных выражений от ICU.

Вот один из способов сделать это:

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

let str = "[email protected] heyyyyy cool [email protected]" 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 [[email protected], [email protected]] 
1

Эти код работает для меня. Вы можете проверить регулярное выражение электронной почты от here.

func extractEmailAddrIn(text: String) -> [String] { 
    var results = [String]() 

    let emailRegex = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}" 
    let nsText = text as NSString 
    do { 
     let regExp = try NSRegularExpression(pattern: emailRegex, options: NSRegularExpressionOptions.CaseInsensitive) 
     let range = NSMakeRange(0, text.characters.count) 
     let matches = regExp.matchesInString(text, options: .ReportProgress, range: range) 

     for match in matches { 
      let matchRange = match.range 
      results.append(nsText.substringWithRange(matchRange)) 
     } 

    } catch _ { 
    } 

    return results 
} 
Смежные вопросы