".*"正则表达式重复输出?

Tyi*_*ilo 1 regex objective-c

码:

static NSString* regexReplace(NSString* regexString, NSString* subject, NSString* replacement)
{
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexString options:0 error:nil];
    return [regex stringByReplacingMatchesInString:subject options:0 range:NSMakeRange(0, [subject length]) withTemplate:replacement];
}
int main(int argc, const char * argv[])
{

    @autoreleasepool
    {

        NSLog(@"%@", regexReplace(@".*", @"foo", @"bar")); //Output: barbar
        NSLog(@"%@", regexReplace(@".+", @"foo", @"bar")); //Output: bar

    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么".*"正则表达式将"foo"替换为"barbar"而不是"bar"?

rua*_*akh 5

因为它匹配两次:首先它匹配"foo"部分,然后匹配一个空""的结尾"foo".

(你甚至可以想象它匹配无数次,屈服"barbarbarbar...",但正则表达式的regex引擎有意设计为在移动之前只生成一个空字符串匹配,这样可以避免这种无限循环.)