2

我有一个正则表达式来搜索字符串,然后将它们包装在某些 html 标记中。问题是两个土耳其语字符(İ 和 ı)不匹配它们的小写或大写。所以它们不能正确包装。

更准确地说:

  • i 甚至 İ 与 İ 不匹配(它可能变成“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>"];
4

1 回答 1

0

自己解决了。方法如下:

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

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

我所做的是改变我的正则表达式。所以基本上我检查了 NSString 中的所有字母,并用 [iİıI] 替换了有问题的字母(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;
}
于 2012-10-01T23:13:07.227 回答