У меня это регулярное выражение работает, когда я тестирую его на PHP, но он не работает в Objective C:
(?:www\.)?((?!-)[a-zA-Z0-9-]{2,63}(?<!-))\.?((?:[a-zA-Z0-9]{2,})?(?:\.[a-zA-Z0-9]{2,})?)
Я попробовал экранировать escape-символы, но это тоже не помогает. Должен ли я избегать любого другого персонажа?
Это мой код в Objective 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 я получаю только одно значение: "domain-name.tld.tld2"
- ОБНОВЛЕНИЕ 2 -
Это регулярное выражение извлекает "имя домена" и "TLD" из строки:
- domain.com = (домен, ком)
- domain.co.uk = (domain, co.uk)
- -test-domain.co.u = (test-domain, co)
- -test-domain.co.uk- = (test-domain, co.uk)
- -test-domain.co.u-k = (test-domain, co)
- -test-domain.co-m = (тестовый домен)
- -test-domain-.co.uk = (тестовый домен)
он принимает действительное доменное имя (не начинающееся и не заканчивающееся на "-" и между 2 и 63 символами) и до двух частей ДВУ, если части действительны (не менее двух символов, содержащих только буквы и номера)
Надеюсь, что это объяснение поможет.