正则表达式& Anyword =

时间:2014-05-19 05:47:48

标签: ios regex nsregularexpression

& Anyword =

的正则表达式是什么

我需要找到这个表达式的出现并用其他模板替换它,但我需要保留" Anyword"介于"&"和" ="。

2 个答案:

答案 0 :(得分:1)

如果您想查找&=之间的内容,可以使用@"&([^\\=]*)="之类的正则表字符串(即" {{1}之间的字符}和&这些本身不是=字符")。如果您还希望不仅捕获=,还要捕获&Anyword=,那么您可以使用?Anyword=

当您找到匹配项时,您可以使用@"[&?]([^\\=]*)="来识别旧字符串的内容,并将其替换为其他字符串。例如:

例如,创建正则表达式:

NSRange

现在用它来查找NSError *error; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"&([^\\=]*)=" options:0 error:&error]; NSAssert(regex, @"Regex failed: %@", error); &之间的字符串:

=

报道:

range = {36, 7}
foundKey = Anyword
newString = http://www.apple.com/?device=iPhone&os=true

如果您只想查找第一个,可以使用NSString *string = @"http://www.apple.com/?device=iPhone&Anyword=true"; [regex enumerateMatchesInString:string options:0 range:NSMakeRange(0, [string length]) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { NSRange range = [result rangeAtIndex:1]; NSLog(@"range = %@", NSStringFromRange(range)); NSString *foundKey = [string substringWithRange:range]; NSLog(@"foundKey = %@", foundKey); NSString *newString = [string stringByReplacingCharactersInRange:range withString:@"os"]; NSLog(@"newString = %@", newString); }]; 而不是使用firstMatchInString查看所有内容,但希望这说明了这个想法。


如果这是一个网址,我可能会倾向于只使用enumerateMatchesInString方法来获取查询部分,然后我会使用{{获得各种query个组件1}},然后用另一个key=value提取componentsSeparatedByStringkey

value

那会产生:

query = device=iPhone&Anyword=true
parameterDictionary = {
    Anyword = true;
    device = iPhone;
}

然后,您可以根据需要修改该字典,然后根据需要重建URL。

正如您所看到的,您可以使用正则表达式处理这样的问题,如前所示,或者使用componentsSeparatedByString将字符串扩展到数组中(如果您想将它们连接回字符串,则可以使用{ {1}})。

答案 1 :(得分:0)

这应该可以解决。

    NSError *error;
    NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:@"&Anyword=" options:NSRegularExpressionIgnoreMetacharacters error:&error];
    NSString *reqdString = @"Some string with &Anyword= &Anyword= &Anyword= in it";

    //For a single match
    if ([regex firstMatchInString:reqdString options:NSMatchingReportCompletion range:NSMakeRange(0, reqdString.length)].resultType == NSTextCheckingTypeRegularExpression) {
        [reqdString stringByReplacingOccurrencesOfString:@"&Anyword=" withString:@"Replaceemt String"];
    }

    //For mutiple matches
    NSUInteger numberOfMatches = [regex numberOfMatchesInString:reqdString options:NSMatchingReportCompletion range:NSMakeRange(0, reqdString.length)];
    if (numberOfMatches) {
        for (int index = 0; index < numberOfMatches; index ++) {
            //Do your replacement stuff.
        }
    }

希望这有帮助