我很高兴Lion引入了NSRegularExpression
,但我无法理解为什么模式.*
匹配像“a”这样的字符串中的两个匹配项(文本可以更长)。
我正在使用以下代码:
NSError *anError = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@".*"
options:0
error:&anError];
NSString *text = @"a";
NSUInteger counter = [regex numberOfMatchesInString:text
options:0
range:NSMakeRange(0, [text length])];
NSLog([NSString stringWithFormat:@"counter = %u", counter]);
控制台的输出是:
2011-07-27 22:03:27.689 Regex [1930:707] counter = 2
任何人都可以解释为什么会这样吗?
答案 0 :(得分:6)
正则表达式.*
匹配零个或多个个字符。因此,它将匹配空字符串以及a
,因此有两个匹配。
答案 1 :(得分:2)
轻微的惊讶,它没有匹配3次。一个用于“a”之前的“”,一个用于“a”,一个用于“a”之后的“”。
正如已经指出的那样,使用更精确的模式;包括锚点(^和/或$)也可能会改变行为。
没有人问过,但你为什么要这样做呢?
答案 2 :(得分:1)
NSRegularExpression上的documents说出以下内容:
一些正则表达式[...]可以 成功匹配零长度范围,所以比较了 结果范围{NSNotFound,0}是最可靠的方法 确定是否有匹配。
我更可靠地获得一场比赛的方法是将表达式更改为.+