строка поиска начинается и заканчивается в многократном вхождении одной и той же строки

Я извиняюсь за тот же вопрос, но я не получил ответа, я пытался в течение 2 дней, не получая его, может ли кто-нибудь мне помочь.

мне нужно найти и напечатать только строку, которая начинается и заканчивается на «&». но в моей строке много одинаковых случаев "&"

EX:

123:342:431:234& 232:2344:433:434& 234:453:534:3445&

я хочу напечатать только строку, начинающуюся с «& xyz», а затем заканчивающуюся на «&» (232:2344:433:434&)

когда-нибудь я получу
234:453:534:3445& 123:342:431:234& 232:2344:433:434&

здесь также я хочу напечатать тот же «& xyz» и заканчивается «&».

Я пробовал "NSRange", "NSscanner", "NSpredictive". Но я не понимаю, что конкретная строка должна быть ptrit

// NSS-сканер:

    NSMutableArray *substrings = [NSMutableArray new];
    NSScanner *scanner = [NSScanner scannerWithString:s];
    [scanner scanUpToString:@"&abc" intoString:nil]; //
    NSString *substring = nil;
    [scanner scanString:@"&abc" intoString:nil]; // Scan the # character
    if([scanner scanUpToString:@"&" intoString:&substring]) {
       // If the space immediately followed the &, this will be skipped
       [substrings addObject:substring];
       NSLog(@"substring is :%@",substring);
    }
    // do something with substrings
    [substrings release];


// NSpredictive :

NSString *new="123:342:431:234& 232:2344:433:434& 234:453:534:3445&";

NSArray *arr = [new ComponentsSepetratedByString @:" "];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self BEGINSWITH[cd] %@ AND self ENDSWITH[cd] %@",@"&abc",@"&"];

NSLog(@"Sorted Array %@",[arr filteredArrayUsingPredicate:predicate]);
NSArray *sortedArray = [arr filteredArrayUsingPredicate:predicate];

NSMutableArray *finalResult = [NSMutableArray arrayWithCapacity:0];
for(NSString *string in sortedArray)
{
    NSString *content = string;
    NSRange range1 = [content rangeOfString:@"&abc"];
    if(range1.length > 0)
        content = [content stringByReplacingCharactersInRange:range1 withString:@""];

    NSRange range2 = [content rangeOfString:@"&"];
    if(range2.length > 0)
        content = [content stringByReplacingCharactersInRange:range2 withString:@""];

    [finalResult addObject:content];
}

NSLog(@"%@",finalResult);

person Diaaaaan    schedule 15.04.2013    source источник
comment
вы можете попробовать использовать регулярное выражение   -  person iAppDeveloper    schedule 15.04.2013
comment
я пытался, но я получаю печать от (от &xyz до последнего появления &), но мне нужна только определенная строка для печати   -  person Diaaaaan    schedule 15.04.2013
comment
Я пробовал NSArray *arr = [NSArray arrayWithObjects:@123:183:184:142&, @134:534:435:432&, @323:535:234:532&, @& Я не в нем, @&abc я вне & ,ноль]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@self НАЧИНАЕТСЯ[cd] %@ И ЗАКАНЧИВАЕТСЯ [cd] %@,@&abc,@&]; NSLog(@%@,[arr filteredArrayUsingPredicate:predicate]); и это дает желаемый результат   -  person Raj    schedule 15.04.2013


Ответы (1)


Это то, что вы ищите?

NSString *string = @"&abc;123:342:431:234& &xyz;232:2344:433:434& &pqr;234:453:534:3445&";

NSString *pattern = @"&xyz[^&]+&";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
                                       options:0 error:NULL];

[regex enumerateMatchesInString:string options:0 range:NSMakeRange(0, [string length])
             usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
                 NSRange range = [result range];
                 NSString *matched = [string substringWithRange:range];

                 NSLog(@"%@", matched);
             }];

Вывод:

&xyz;232:2344:433:434&
person Martin R    schedule 15.04.2013