2013-09-11 2 views
-1

пожалуйста, мне нужна ваша помощь. Здесь я написал часть кода, и не могу найти, где моя ошибка:NSRegularExpression не работает

NSString *inputString [email protected]"11111111111"; 
NSError *error = nil; 
NSRegularExpression *regExpression = [NSRegularExpression regularExpressionWithPattern:@"[[a-zA-Z]]*" 
                      options:NSRegularExpressionCaseInsensitive error:&error]; 

NSUInteger numberOfMatches = [regExpression numberOfMatchesInString:inputString 
                  options:0 
                   range:NSMakeRange(0, [inputString length])]; 

NSLog(@"numberOfMatches=%d", numberOfMatches); 
// here shows "numberOfMatches = 7" 

Но проверил здесь результат, ответ неверный! http://gskinner.com/RegExr/

Итак, вопрос: где моя ошибка?

+0

Как мы должны знать это? Вы не говорите нам, чего вы ожидаете, поэтому мы не можем знать правильный ответ. – stema

+0

Я ожидаю, что «inputString» должен быть только таким: «abs qwer» Не может быть никаких цифр, только в алфавитном порядке. Итак, для inputString = @ "111111" количество матов должно быть нулевым. – kokemomuke

+0

Тогда мой ответ должен быть близок к тому, что вы хотите, за исключением того, что пространство отсутствует в классе char. – stema

ответ

2

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

Проблема заключается в вашем квантере *. Он соответствует 0 или более, означает [[a-zA-Z]]*, он также будет соответствовать, если он найдет 0 символов (пустая строка) и пустая строка будет найдена перед каждой цифрой и в конце строки.

Возможно, это поможет вам использовать квантор +, он соответствует 1 или более. Возможно, регулярное выражение [a-z]+ - это то, что вы хотите.

КПП. [[a-zA-Z]]* скорее всего ошибается, я думаю, вы хотите [a-zA-Z]. Другое дело, когда вы используете options:NSRegularExpressionCaseInsensitive, вам не нужно указывать буквы верхнего и нижнего регистра в вашем классе символов, [a-z] будет в порядке.

0

вы можете дать это попробовать, если ваш вход 1111 ...

NSRegularExpression * regExpression = [NSRegularExpression 
regularExpressionWithPattern:@"\\W-?1?[0-9]{2}(\\.[0-9]{1,2})?\\W" 
        options:0 
        error:&error]; 

для справки вы можете посетить here.

+0

Шаблон регулярного выражения, который я получил с сервера, и проверил этот шаблон в http://gskinner.com/RegExr/, так что все правильно. Проблема заключается в неправильной работе NSRegularExpression. – kokemomuke

1

Я думаю, что вы должны изменить RegularExpression как [[a-z]*]

+0

regularExpressionWithPattern: @ "[[a-zA-Z]] *", так где же моя ошибка? – kokemomuke

+0

@kokemomuke однажды измените @ "[[a-zA-Z]] *" на @ "[[a-z] *]" и проверьте – MobileDev

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