Как писать регулярные выражения в Objective C (NSRegularExpression)?

У меня это регулярное выражение работает, когда я тестирую его в PHP, но оно не работает в Objective C:

(?:www\.)?((?!-)[a-zA-Z0-9-]{2,63}(?<!-))\.?((?:[a-zA-Z0-9]{2,})?(?:\.[a-zA-Z0-9]{2,})?)

Я попытался экранировать escape-символы, но это тоже не помогло. Следует ли экранировать любой другой символ?

Это мой код в цели C:

NSMutableString *searchedString = [NSMutableString stringWithString:@"domain-name.tld.tld2"];
NSError* error = nil;

NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"(?:www\\.)?((?!-)[a-zA-Z0-9-]{2,63}(?<!-))\\.?((?:[a-zA-Z0-9]{2,})?(?:\\.[a-zA-Z0-9]{2,})?)" options:0 error:&error];
NSArray* matches = [regex matchesInString:searchedString options:0 range:NSMakeRange(0, [searchedString length])];
for ( NSTextCheckingResult* match in matches )
{
    NSString* matchText = [searchedString substringWithRange:[match range]];
    NSLog(@"match: %@", matchText);
}

- ОБНОВЛЕНИЕ -

Это регулярное выражение возвращает (в PHP) массив со значениями «имя-домена» и «tld.tld2» "но в Objective C я получаю только одно значение:" имя-домена.tld.tld2 "

- ОБНОВЛЕНИЕ 2 -

Это регулярное выражение извлекает 'имя домена' и 'TLD' из строки:

  • domain.com = (домен, com)
  • domain.co.uk = (домен, co.uk)
  • -test-domain.co.u = (test-domain, co)
  • -test- domain.co.uk- = (test-domain, co.uk)
  • -test-domain.co.uk = (test-domain, co)
  • -test-domain.co-m = (test- domain)
  • -test-domain-.co.uk = (test-domain)

требуется допустимое доменное имя (не начинающееся и не заканчивающееся на '-' и от 2 до 63 символов) и до две части TLD, если части действительны (по крайней мере, два символа длиной, содержащие только буквы и цифры)

Надеюсь, это объяснение поможет.

48
задан budidino 14 February 2012 в 12:22
поделиться