Как извлечь адрес электронной почты из строки с помощью NSRegularExpression

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

Например, если строка похожа на

asdjasjkdh asdhajksdh jkashd sample@email.com asdha jksdh asjdhjak sdkajs test@gmail.com

я должен извлечь «sample@email.com» и «test@gmail.com»,

и я также хочу извлечь только дату из строки

Например, если строка похожа на

asdjasjkdh 01/01/2012 asdhajksdh jkas 12/11/2012 hd sample@email.com asdha jksdh asjdhjak sdkajs test@gmail.com

я должен извлечь «01/01/2012» и «12/11/2012»

Небольшой код-снайпер будет очень полезен.

заранее спасибо

Это сделает то, что вы хотите:

// regex string for emails (feel free to use a different one if you prefer) NSString *regexString = @"([A-Za-z0-9_\\-\\.\\+])+\\@([A-Za-z0-9_\\-\\.])+\\.([A-Za-z]+)"; // experimental search string containing emails NSString *searchString = @"asdjasjkdh 01/01/2012 asdhajksdh jkas 12/11/2012 hd sample@email.com asdha jksdh asjdhjak sdkajs test@gmail.com"; // track regex error NSError *error = NULL; // create regular expression NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexString options:0 error:&error]; // make sure there is no error if (!error) { // get all matches for regex NSArray *matches = [regex matchesInString:searchString options:0 range:NSMakeRange(0, searchString.length)]; // loop through regex matches for (NSTextCheckingResult *match in matches) { // get the current text NSString *matchText = [searchString substringWithRange:match.range]; NSLog(@"Extracted: %@", matchText); } } 

Используя примерную строку выше:

asdjasjkdh 01/01/2012 asdhajksdh jkas 12/11/2012 hd sample@email.com asdha jksdh asjdhjak sdkajs test@gmail.com

Выход:

 Extracted: sample@email.com Extracted: test@gmail.com 

Чтобы использовать код, просто установите searchString в строку, которую вы хотите выполнить. Вместо методов NSLog () вы, вероятно, захотите что-то сделать с извлеченными строками matchText . Не стесняйтесь использовать другую строку регулярных выражений для извлечения электронных писем, просто замените значение regexString в коде.

 NSArray *chunks = [mylongstring componentsSeparatedByString: @" "]; for(int i=0;i<[chunks count];i++){ NSRange aRange = [chunks[i] rangeOfString:@"@"]; if (aRange.location !=NSNotFound) NSLog(@"email %@",chunks[i] ); } 

Вы можете использовать это регулярное выражение для соответствия электронным письмам

  [^\s]*@[^\s]* 

и это регулярное выражение соответствует датам

  \d+/\d+/\d+