NSPredicate与Regex匹配国际字母字符集

时间:2011-11-06 19:45:40

标签: regex cocoa-touch cocoa

我正在尝试验证代表地名的字符串。我正在匹配像这样的简单字符集

NSString *regexName = @"[a-zA-Z][., a-zA-Z\\t\\-]*"
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regexName];

我想知道简单的正则表达式用于匹配更广泛的国际字符集(主要是西方字符)。我可以在正则表达式中枚举我能想到的每个角色,但我想还有另外一种方法。我正在寻找想法。

1 个答案:

答案 0 :(得分:0)

NSRegularExpression基于ICU正则表达式,在docs中列出了不少选项。

您正在寻找的是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”。

这个问题提到了西方人物,但是对于使用其他字母表的语言的例子也会很好。