". *" regex дублирует вывод? - PullRequest
       0

". *" regex дублирует вывод?

1 голос
/ 14 февраля 2012

Код:

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;
}

Почему регулярное выражение ". *" Заменяет 'foo' на 'barbar' вместо 'bar'?

Ответы [ 2 ]

5 голосов
/ 14 февраля 2012

Поскольку он совпадает дважды: сначала он соответствует части "foo", а затем соответствует пустому "" в конце "foo".

(Вы можете даже представить, что он соответствует бесконечному числу раз, давая "barbarbarbar...", но механизм регулярных выражений специально разработан для того, чтобы производить только одно совпадение с пустой строкой, прежде чем двигаться дальше, точно так, чтобы избежать таких бесконечных циклов.)

0 голосов
/ 14 февраля 2012

Расширение ответа Руаха немного похож на вопрос SO, который дает больше ответа «почему»:

почему-год-2010-0-4-результаты-пусто-string-в-1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...