2013-10-25 3 views
0

Я новичок в объективе-c.Как изменить строку с помощью NSRegularExpression

У меня есть следующие NSMutableString [email protected]"[abc][test][end]";

Что является лучшим способом, я должен использовать для того, чтобы УДАЛИТЬ ПОСЛЕДНИЙ [] часть (например [конец])?

У меня есть этот код:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\[]" options:0 error:NULL]; 
    NSArray *matches = [regex matchesInString:stringVal options:0 range:NSMakeRange(0, [stringVal length])]; 
    for (NSTextCheckingResult *match in matches) { 
     ?? what should i do here? 
    } 
+0

Хорошо, я понимаю, вы хотите удалить конец строки, а затем вы хотите добавить на свой массив правильно? –

ответ

0

Я думаю, вы должны использовать этот шаблон регулярного выражения "\\[.*?]", то вы получите три матча

['[abc]', '[test]', '[end]'] 

то можно просто получить диапазон из третьего матча (проверьте, что у вас есть как минимум три)

NSMutableString* stringVal= [NSMutableString stringWithString:@"[abc][test][end]"]; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\[.*?]" options:0 error:NULL]; 
NSArray *matches = [regex matchesInString:stringVal options:0 range:NSMakeRange(0, [stringVal length])]; 
NSTextCheckingResult* match = matches[2]; 

NSMutableString* substring = [[stringVal substringToIndex:match.range.location] mutableCopy]; 
+0

У меня есть следующая работа: Неизвестная escape-последовательность "" \ "]". Также stringVal - это NSMutableString. Как я должен писать, если я хочу, чтобы подстрока тоже была NSMutableString? –

+0

Не работает. он не отображает никаких [match rangeAtIndex: 0] –

+0

NSRegularExpression * regex = [NSRegularExpression regularExpressionWithPattern: @ "\ [. *?]" options: 0 error: NULL]; NSArray * matches = [regex matchesInString: stringval options: 0 range: NSMakeRange (0, [stringval length])]; NSTextCheckingResult * match = [matches lastObject]; NSRange matchRange = [диапазон соответствия]; NSLog (@ "соответствует:% @", [stringval substringWithRange: [match rangeAtIndex: 0]]); –

0

jbat был прав, что вы должны изменить регулярное выражение. После этого, все, что вам нужно, это последний матч, так что вы можете использовать

NSTextCheckingResult *match = [matches lastObject]; // Get the last match 
NSRange matchRange = [match range]; // Get the position of the match segment 
NSString *result = [stringVal stringByReplacingCharactersInRange:matchRange withString:@""]; // Replace the segment by an empty string. 
+1

Это было бы правильно, если бы его регулярное выражение было правильным ... – jbat100

+0

Да, я только что добавил ваше предложение. Благодарю. –