2012-09-30 32 views
2

我有一个正则表达式,它搜索字符串,然后将它们包装在某些html标记中。问题是两个土耳其字符(İ和ı)无法与其较低或较高的情况进行匹配。所以他们不能被正确包装。Objective-C不区分大小写和土耳其文字符

为了更精确:

  • 我,甚至我是不是对I(它可能变成 “I”)
  • 我不反对ı匹配匹配(它可能变成 “我”)

例如: 搜索项是İskendername。 该字符串完全按照原样包含它(İskendername),但根本没有匹配。

这里是我的代码:

NSString *regex_pattern = [[NSArray arrayWithObjects:@"(", search_term, @")(?![^<>]*>)",nil] componentsJoinedByString:@""]; 

    NSError *error = NULL; 

    NSRegularExpression *regex = [NSRegularExpression 
regularExpressionWithPattern:regex_pattern options:NSRegularExpressionCaseInsensitive error:&error]; 

    string_to_be_searched = [regex stringByReplacingMatchesInString:string_to_be_searched options:0 range:NSMakeRange(0, [stringByReplacingMatchesInString:string_to_be_searched length]) withTemplate:@"<div class=""highlight"">$1</div>"]; 
+0

如果你这样做有损转换第一?例如'string_to_be_searched = [[NSString alloc] initWithData:[string_to_be_searched dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES] encoding:NSASCIIStringEncoding]'? –

+0

这样,当它被搜索为“iskendername”时,它现在将“İskendername”替换为“Iskendername”。而且内容变得奇怪,带有问号和其他不同的字符(所有的土耳其字符都丢失了!)。无论如何,谢谢你。 –

回答

0

解决它自己。这是如何:

我没有办法得到任何种类的NS ..选项来支持土耳其人物。有损转换会导致我的呈现内容出现问题。所以这里是我如何整理出来的:

正如我所说的,存在这样的问题:我被理解为-i-和-i-被视为我,但土耳其字母表并非如此。我们有一个小写-I-和一个大写-İ-。

我所做的就是改变我的正则表达式。所以基本上我经历了NSString中的所有字母,并用[iİII]替换了有问题的字母(我和i),所以我的正则表达式会接受它们,而不管它们是否在顶部有点。

这里是万一有人代码需要它..

- (NSString*)returnRegexPatternForSearchString:(NSString *)search_string 
{ 
NSString *regex_pattern = [[NSString alloc] init]; 

for(int i =0 ;i<[search_string length]; i++) 
{ 


if([[search_string substringWithRange:NSMakeRange(i, 1)] isEqualToString:@"ı"] ||  [[search_string substringWithRange:NSMakeRange(i, 1)] isEqualToString:@"I"]) 
{ 
    regex_pattern = [regex_pattern stringByAppendingString:@"[ıI]"]; 
} 
else if([[search_string substringWithRange:NSMakeRange(i, 1)] isEqualToString:@"i"] || [[search_string substringWithRange:NSMakeRange(i, 1)] isEqualToString:@"İ"]) 
{ 

    regex_pattern = [regex_pattern stringByAppendingString:@"[iİıI]"]; 
} 
else 
{ 
    regex_pattern = [regex_pattern stringByAppendingString:[search_string substringWithRange:NSMakeRange(i, 1)]]; 
    } 
} 

return regex_pattern; 
}