NSString子串检测

时间:2014-02-11 14:20:30

标签: ios objective-c string nsstring substring

我需要帮助用另一个字符串替换字符串的出现。需要检测的Occurrency实际上是某种功能:

%nx+a%nx-a

其中xa是一些数字。

例如%n10+2%n54-11

我甚至不能使用类似的东西:
NSRange startRange = [snippetString rangeOfString:@"%n"];

因为如果我在同一个字符串中有两个模式我正在检查我只会得到第一个的起始范围......

感谢。

3 个答案:

答案 0 :(得分:2)

对于类似的内容,您可以使用NSRegularExpression并使用方法enumerateMatches:

或者你可以创建自己的循环。

一旦你拥有正确的模式,第一个是最简单的。

像...一样的东西。

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"%n" options:0 error:nil];

NSString *string = @"%n10+2*%n2";

[regex enumerateMatchesInString:string
options:0
range:NSMakeRange(0, string.length)
usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
    // here you will get each instance of a match to the pattern
}];

您必须查看NSRegularExpression的文档,了解如何执行您需要执行的操作。

文档... https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html

答案 1 :(得分:1)

我认为你需要对这两个数字做点什么。我认为最好的方法是使用正则表达式一次性提取所需内容。

NSString * string = @"some %n5-3 string %n11+98";
NSError * regexError = nil;
NSRegularExpression * regex = [NSRegularExpression regularExpressionWithPattern:@"%n(\\d+)([+-])(\\d+)"
                                                                        options:0
                                                                          error:&regexError];
NSArray * matches = [regex matchesInString:string options:0 range:NSMakeRange(0, string.length)];
for (NSTextCheckingResult * match in matches) {
    NSString * firstNumber = [string substringWithRange:[match rangeAtIndex:1]];
    NSString * secondNumber = [string substringWithRange:[match rangeAtIndex:3]];
    NSString * sign = [string substringWithRange:[match rangeAtIndex:2]];
    // Do something useful with the numbers.
}

当然,如果您只需要用常量字符串替换所有%n次出现,您可以在一次调用中执行此操作:

NSString * result = [string stringByReplacingOccurrencesOfString:@"%n\\d+[+-]\\d+"
                                                      withString:@"here be dragons"
                                                         options:NSRegularExpressionSearch
                                                           range:NSMakeRange(0, string.length)];

免责声明:我没有测试此代码。可能存在轻微的错误。

答案 2 :(得分:-1)

更改此代码以符合您的需要

yourString = [yourString stringByReplacingOccurrencesOfString:@" +" withString:@" "options:NSRegularExpressionSearch range:NSMakeRange(0, yourString.length)];