2016-12-27 8 views
2

NSArray의 개체를 필터링하려는 한 시나리오가 있으며 NSDictionary 개체가 있고 모든 개체의 키는 name입니다. name 키 값이 0-9,[email protected]#$%^&*()_ 등의 숫자와 같은 특수 문자 또는 숫자로 시작해야하는 수의 개체로 필터링하고 싶습니다.필터 개체에 대한 NSPredicate whoes 문자열이 특수 문자 BEGINSWITH입니다.

나는이 문제를 Google에서 찾지 만 적절한 해결책을 찾지 못했습니다. 나는 아래의 술어를 사용했지만 올바른 객체를 얻을 수 없다.

NSPredicate *predicate= [NSPredicate predicateWithFormat:@"self.name BEGINSWITH %@",@"[^0-9]+.*"]; 

답변

1

BEGINSWITH 연산자는 정규식을 지원하지 않습니다. 술어에서 다음을 사용하여 비 알파벳 문자로 시작하는지 확인할 수 있습니다.

NSString *myRegex = @"[A-Za-z]*"; 
NSPredicate *myTestPred = [NSPredicate predicateWithFormat:@"NOT (SELF MATCHES %@)", myRegex] 
+0

작동하지 않는 경우 런타임에 예외가 발생합니다. '잡히지 않은 예외로 인해 응용 프로그램 종료 중'NSInvalidArgumentException ', 이유 :'형식 문자열을 구문 분석 할 수 없습니다. '(SELF MATCHES [c]'^ [A-Za-z]. * '' '') –

+0

구문을 해결 한 후에 시도했습니다. 술어에 오류가 있지만 여전히 작동하지 않습니다. –

+0

예, 이제 작동합니다.하지만 '정규식'은 '@ "^ [A-Za-z] *"'여야합니다. –