私は現在、NSRegularExpressionsと、RSSフィードから特定のものをフィルタリングする方法を自分自身に教えています。特に、RSSフィードの形式は「テキスト::(返信用にRe:があります)テキスト::テキスト」の形式です。そのRe:が存在する場合は削除したいと思います。私が現在持っているものの中に別のNSRegularExpressionを作成せずにこれを行う方法があるはずだと私は知っています。すべての記号を把握しているわけではありません。キャプチャからRe:を除外するために?:を使用しようとしましたが、その方法を完全に理解することはできません。誰かが私のためにこれを見て、私に助けを与えてくれませんか?
NSRegularExpression *reg = [[NSRegularExpression alloc] initWithPattern:@".* :: ?:Re: (.*) :: .*" options:0 error:nil]; //The () creates a capture group and an array of ranges for reg
//Loop through every title of the items in channel
for (RSSItem *i in items) {
NSString *itemTitle = [i title];
//find mittts
//Find matches in the title string. The range argument specifies how much of the title to search; in this case, all of it.
NSArray *matches = [reg matchesInString:itemTitle options:0 range:NSMakeRange(0, [itemTitle length])];
//If there was a match...
if ([matches count] > 0) {
//Print the location of the match in the string and the string
NSTextCheckingResult *result = [matches objectAtIndex:0];
NSRange r = [result range];
NSLog(@"\nMatch at {%d, %d} for %@!\n", r.location, r.length, itemTitle);
NSLog(@"Range : %d",[result numberOfRanges]);
//One capture group, so two ranges, let's verify
if ([result numberOfRanges] == 2) {
//Pull out the 2nd range, which will be the capture group
NSRange r = [result rangeAtIndex:1];
//Set the title of the item to the string within the capture group
[i setTitle:[itemTitle substringWithRange:r]];
NSLog(@"%@", [itemTitle substringWithRange:r]);
}
}
}