2012-01-20 2 views
2

я делаю регулярное выражение для следующей строки:NSRegularExpression не соответствует

Table 'Joella VIII' 6-max Seat #4 is the button 

До сих пор, у меня есть это:

self.tableDetailsRegex = [NSRegularExpression regularExpressionWithPattern:@"Table '[A-Za-z0-9 ]*' [0-9]+-max Seat #[0-9]+ is the button" options:NSRegularExpressionAllowCommentsAndWhitespace error:nil]; 

if([self.tableDetailsRegex numberOfMatchesInString:line options:NSMatchingReportCompletion range:NSMakeRange(0, line.length)] == 1) 
{ 
    NSLog(@"%@", line); 
} 

Итак, мое регулярное выражение:

Table '[A-Za-z0-9 ]*' [0-9]+-max Seat #[0-9]+ is the button 

И я уверен, что выбранная линия приходит в какой-то момент, потому что я печатаю все линии немного дальше в моем коде ...

+0

FWIW, если я копирую/вставляю ваш шаблон и тестовую строку в свой инструмент, он соответствует. Проблема относительно 'if'? – Seki

ответ

2

Ваша проблема в том, какие параметры вы используете. Из NSRegularExpression Class Reference, NSRegularExpressionAllowCommentsAndWhitespace означает, что пробелы и что-либо после # в регулярном выражении будут проигнорированы. При включенной опции, что регулярное выражение действует следующим образом:

Table'[A-Za-z0-9]*'[0-9]+-maxSeat 

Вы, вероятно, хотите, чтобы передать 0 вариантов, так что ни один из них не получить включен.

self.tableDetailsRegex = [NSRegularExpression regularExpressionWithPattern:@"Table '[A-Za-z0-9 ]*' [0-9]+-max Seat #[0-9]+ is the button" options:0 error:nil]; 
+0

Спасибо, что сработало –

3

Ваше регулярное выражение соответствует вашей строке. Попробуйте в этом online matcher.

Проблема заключается в том, что вы передаете: NSRegularExpressionAllowCommentsAndWhitespace, что приводит к тому, что совпадение игнорирует пробелы и # знаки плюс все, что следует за # в регулярном выражении, которое вы не хотите. Пропустите ноль для параметров.