我的代码看起来像
NSString *pattern = @"\\w+(\\w)";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
options:NSRegularExpressionCaseInsensitive error:nil];
NSString *testValue = @"Beer, Wine & Spirits (beer_and_wine)";
NSTextCheckingResult *match = [regex firstMatchInString:testValue options:0 range:NSMakeRange(0, testValue.length)];
for (int groupNumber=1; groupNumber<match.numberOfRanges; groupNumber+=1) {
NSRange groupRange = [match rangeAtIndex:groupNumber];
if (groupRange.location != NSNotFound)
NSLog(@"match %d: '%@'", groupNumber, [testValue substringWithRange:groupRange]);
else
NSLog(@"match %d: '%@'", groupNumber, @"");
}
我想做什么?
来自
NSString *testValue = @"Beer, Wine & Spirits (beer_and_wine)";
我想提取beer_and_wine
我得到了什么?
当我运行此代码时,没有任何匹配,所以没有打印出来
答案 0 :(得分:2)
要匹配beer_and_wine
,您可以使用这个简单的正则表达式:
(?<=\()[^()]*
见demo。
(?<=\()
外观检查我们前面有一个左括号[^()]*
匹配任何不是括号的字符在代码中,类似这样:
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?<=\\()[^()]*" options:NSRegularExpressionAnchorsMatchLines error:&error];
if (regex) {
NSRange rangeOfFirstMatch = [regex rangeOfFirstMatchInString:subject options:0 range:NSMakeRange(0, [subject length])];
if (!NSEqualRanges(rangeOfFirstMatch, NSMakeRange(NSNotFound, 0))) {
NSString *result = [string substringWithRange:rangeOfFirstMatch];
} else {
// no match
}
} else {
// there's a syntax error in the regex
}
答案 1 :(得分:1)
您的正则表达式不正确,因此它与您期望的不匹配。请尝试以下方法:
NSString *pattern = @"\\((\\w+)\\)";