& Anyword =
的正则表达式是什么我需要找到这个表达式的出现并用其他模板替换它,但我需要保留" Anyword"介于"&"和" ="。
答案 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
提取componentsSeparatedByString
和key
:
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.
}
}
希望这有帮助