我在尝试匹配NSString
中的CJK扩展B字符时遇到了问题。
Wikipédia CJK Unified Ideographs Extension B :
CJK Unified Ideographs Extension B是一个包含稀有的Unicode块 中国,日本,韩国和中国的历史性CJK表意文字 越南。
字符的unicode块是:从U+20000
到U+2A6DF
我正在使用正则表达式:[\\ud840-\\ud868][\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6]
来匹配CJK扩展B字符。
这是我的代码:
NSString *searchedString = @""; // First character (U+20000)
NSString *pattern = @"[\\ud840-\\ud868][\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6]";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil];
if ([regex numberOfMatchesInString:searchedString options:0 range:NSMakeRange(0, [searchedString length])] > 0) {
NSLog(@"matches");
} else {
NSLog(@"doesn't match");
}
输出:doesn't match
例如,如果我为平假名字符尝试更简单的事情,那么它正在起作用:
NSString *searchedString = @"ひ";
NSString *pattern = @"[\\u3040-\\u309F]";
输出:matches
非常感谢任何帮助。感谢。
答案 0 :(得分:2)
您可以使用\Uxxxxxxxx
表示法匹配BMP平面之外的那些Unicode字符。
度Acc。到ICU regex docs:
\Uhhhhhhhh
将字符与十六进制值hhhhhhhh
匹配。即使最大的Unicode代码点为\U0010ffff
,也必须提供恰好八位十六进制数字。
所以,使用
NSString *pattern = @"[\\U00020000-\\U0002A6DF]+";