Intereting Posts
Строка состояния вращается дважды при изменении ориентации интерфейса Как создать несколько табличных представлений внутри таблицы в объективе-c? Почему существует требование повторного подключения к устройству BLE каждый раз? Следите за тем, как текущая ситуация идет на iPhone или iPad при зарядке Первоначальная ошибка IOS Basic Auth Имя свойства, начинающееся с префикса 'new', приводит к ошибке BAD_ACCESS в iOS Настройка UIScrollview и автозапуска Переключение между UIViewControllers в UINavigationController Как кнопка не отображается в Safari iOS на iPhone iOS Программно удалять историю просмотров Почему этот код FFmpeg не создает видео из серии изображений? Доступ к NSMutableArray изнутри для цикла Ошибка Swift: UIAnimationOptions в UIView.animateWithDuration Вычислить конечную позицию UIView после щелчка с помощью UIPanGestureRecognizer Могу ли я заменить период в десятичной запятой запятой в приложении Swift 2 iPhone?

Как извлечь адрес электронной почты из строки с помощью 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+