#regex #cocoa-touch #cocoa
#регулярное выражение #cocoa-touch #cocoa
Вопрос:
Я пытаюсь проверить строку, представляющую название места. Я сопоставляю простой набор символов, подобный этому
NSString *regexName = @"[a-zA-Z][., a-zA-Z\t\-]*"
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regexName];
Я хотел бы знать простое регулярное выражение, которое можно использовать для сопоставления с более широким международным набором символов (в основном западными символами). Я мог бы просто перечислить каждый символ, который я могу придумать внутри регулярного выражения, но я полагаю, что есть другой способ. Я ищу идеи.
Ответ №1:
NSRegularExpression
основан на регулярных выражениях ICU, и в их документах указано довольно много опций.
То, что вы ищете, — это свойство Letter, которое кодируется как p{Letter}
(или для краткости, p{L}
).
Вот некоторый код для тех, кто хочет увидеть это на практике:
NSArray *strings = [NSArray arrayWithObjects:
@"Joe",
@"Chloë",
@"Søren",
@"Renée",
@"Se7en",
@"Zürich",
@"Genève",
@"Tromsø",
@"Jane",
nil];
NSString *regexName = @"\p{Letter}[., \p{Letter}\t\-]*";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regexName];
NSArray *filteredArray = [strings filteredArrayUsingPredicate:predicate];
Он сопоставляет все имена с буквами, но не строку «Se7en».
В вопросе упоминались западные символы, но было бы неплохо привести примеры из языков, которые также используют другие алфавиты.