Поиск даты и времени в NSString с помощью Regex

Я хочу сделать что-то похожее на этот вопрос: регулярное выражение в ruby ​​для строк с несколькими шаблонами

Но я хочу сделать это Objective-C, В основном я хочу извлечь дату и время из строки с датой и временем после @ знак.

Например, у меня есть строка: Feed the Rabbits @12Я хочу извлечь дату и время после @проблема в том, что строка может отличаться, например @12:00, @04/02/12, @04/02/12 12:00, @04/02/12 12:00 или просто @04/02/12, Вот мой текущий код для извлечения чисел из строки (он не обнаруживает "/" или ":", поэтому, если строка @04/02/12 это будет только извлекать @04 потому что он останавливается на "/").

Я также могу извлечь @12:00 расстаться с помощью этого шаблона RegEx @([0-9]+:[0-9][0-9]),

NSString *regEx = @"@(\\d+)";

NSString *dateString;
r = [inputString rangeOfString:regEx options:NSRegularExpressionSearch];
if (r.location != NSNotFound) 
{
    dateString = [NSString stringWithFormat:@"%@",[inputString substringWithRange:r]];
    return dateString;
} 
else 
{
    return @"";
}

1 ответ

Решение

Регулярное выражение "@(\d+)" находит "@", за которым следуют одна или несколько цифр (и фиксирует только цифры). Если вы хотите, чтобы он находил цифры и косые черты, тире, двоеточия и т. Д., Вам необходимо включить их в регулярное выражение. Если вы хотите искать конкретные шаблоны чисел и знаков препинания, вам понадобится несколько подвыражений, связанных с "или" (то есть | персонаж).

Предвидеть все возможные способы выражения даты и / или времени - тяжелая работа, особенно если вы хотите поддерживать несколько локалей. Возможно, вам будет удобнее, чтобы ваше регулярное выражение захватывало что-нибудь и все после "@" (если вы не уверены, как это сделать, документы NSRegularExpression должны быть полезны). Затем вы можете передать строку в NSDateFormatter для анализа в качестве даты.

Другие вопросы по тегам