У меня это регулярное выражение работает, когда я тестирую его в 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' из строки:
требуется допустимое доменное имя (не начинающееся и не заканчивающееся на '-' и от 2 до 63 символов) и до две части TLD, если части действительны (по крайней мере, два символа длиной, содержащие только буквы и цифры)
Надеюсь, это объяснение поможет.