Objective-C Case-Insensitivity和Turkish Characters

时间:2012-09-30 20:51:59

标签: objective-c regex

我有一个正则表达式,用于搜索字符串,然后将它们包含在某些html标记中。问题是两个土耳其字符(İ和ı)没有匹配他们的较低或较高的情况。所以它们不能被妥善包裹。

更确切地说:

  • 我甚至İ与İ(它可能变成“我”)
  • 不匹配
  • 我不符合ı(它可能变成“我”)

实施例: 搜索字词是İ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>"];

1 个答案:

答案 0 :(得分:0)

自己解决了。方法如下:

我无法获得支持土耳其字符的任何NS ..选项。有损转换会导致我的渲染内容出现缺陷。所以这就是我如何整理出来的:

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

我所做的是改变我的正则表达式。所以基本上我经历了NSString中的所有字母并用[iİı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;
}