2014-11-15 2 views
3

Я пытаюсь получить свое приложение для определения дат. У меня есть массив строк, которые он просматривает. Я использую rangeOfString() для поиска «/», который находится в датах. Тем не менее, некоторые области в строках имеют обратную косую черту, которые не являются частью дат, и это мешает поиску. Могу ли я заставить его искать обратную косую черту сразу же после номера. В PHP это будет preg_match ("/// [0-9] /"), но как это делается с Swift?Быстрая строка поиска для любого числа?

+0

Думаю, вы ищете 'NSRegularExpression'. – Larme

+0

Что это и как я могу использовать? – user3142972

+0

https://developer.apple.com/LIBRARY/ios/documentation/Foundation/Reference/NSRegularExpression_Class/index.html – Larme

ответ

3

Если вам нужно, чтобы соответствовать любой дате в строке вы можете использовать NSDataDetector - NSRegularExpression подкласс, предназначенный для обнаружения некоторые конкретные данные:

Swift версия:

var error : NSError? 

if let detector = NSDataDetector(types: NSTextCheckingType.Date.rawValue, error: &error) { 
    let testString = "Today date is 15/11/2014!! Yesterday was 15-11-2014" 

    let matches = detector.matchesInString(testString, options: .allZeros, range: NSMakeRange(0, countElements(testString))) as [NSTextCheckingResult] 

    for match:NSTextCheckingResult in matches { 
    println(match.date, match.range) 
    } 
} 

Obj-C версия:

NSDataDetector* detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeDate 
                  error:NULL]; 
NSString* testString = @"Today date is 15/11/2014!! Yesterday was 14-11-2014"; 
NSArray* matches = [detector matchesInString:testString 
            options:0 
             range:NSMakeRange(0, testString.length)]; 
// Will match 2 date occurences 
for (NSTextCheckingResult* match in matches) { 
    NSLog(@"%@ in %@", match.date, NSStringFromRange(match.range)); 
} 
+0

Извините, пропущена быстрая часть вопроса. Добавлен код быстрого образца для ответа – Vladimir

Смежные вопросы