0

私は持っている

NSString *str =  @"<0x112233><0x112233><0x112233>0a";

このデータを nsarray に保存したい

nsarray  : { 0x112233 0x112233 0x112233 }

「<>」で囲まれたデータのみを保存し、それ以外は無視します。

私はこのような正規表現を試しました

NSString *str =  @"<0x112233><0x112233><0x112233>0a";

NSError *error2;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<(.*)>"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:&error2];
if (error2)
{
    NSLog(@"Error %@", [error2 description]);
}

NSArray *payloadRanges=[regex matchesInString:str options:0 range:NSMakeRange(0, [str length])];


NSLog(@"data %@",payloadRanges);

しかし、私は私にこの出力を与えます:

data (
    "<NSSimpleRegularExpressionCheckingResult: 0x1ddc5e30>{0, 30}{<NSRegularExpression: 0x1f078710> <(.*)> 0x1}"
)
4

4 に答える 4

5

(Pat Teen がコメントで述べたように)、あなたのパターンはgreedyです。これは、最初の一致が文字列全体である可能な限り取得されることを意味します。

パターン@"<(.*)>"を に変更することで修正できます@"<(.*?)>"

次に、3 つのオブジェクトpayloadRangesの配列です。NSTextCheckingResult

(
    "<NSSimpleRegularExpressionCheckingResult: 0x10010af40>{0, 10}{<NSRegularExpression: 0x100108960> <(.*?)> 0x1}",
    "<NSSimpleRegularExpressionCheckingResult: 0x10010c210>{10, 10}{<NSRegularExpression: 0x100108960> <(.*?)> 0x1}",
    "<NSSimpleRegularExpressionCheckingResult: 0x10010c250>{20, 10}{<NSRegularExpression: 0x100108960> <(.*?)> 0x1}"
)

(...)次に、各結果からグループに一致する部分文字列を抽出する必要があります。

NSMutableArray *data = [NSMutableArray array];
for (NSTextCheckingResult *result in payloadRanges) {
    [data addObject:[str substringWithRange:[result rangeAtIndex:1]]];
}
NSLog(@"data %@",data);

出力:

data (
    0x112233,
    0x112233,
    0x112233
)
于 2013-10-26T11:39:11.000 に答える
0

これを試して:-

NSString *str =  @"<0x112233><0x112233><0x112233>0a";
NSArray *arr = [str componentsSeparatedByString:@"<"];

    NSString *str1 = [arr lastObject];

    NSArray *arr1 = [str1 componentsSeparatedByString:@">"];

    NSLog(@"array is %@",arr1);

    NSString *str2 = [[arr1 objectAtIndex:0] substringFromIndex:1];

NSString *str3=[str2 stringByReplacingOccurrencesOfString:@"0a" withString:@""];
NSLog(@"str3 is %@",str3);
[yourArray addObject:str3];
于 2013-10-26T11:21:08.977 に答える
0

あなたの要件で動作するはずの別の正規表現:

<([^>]*)>
于 2013-10-26T12:46:37.263 に答える