2

文字列を検索して特定の html タグ内にラップする正規表現があります。問題は、トルコ語の 2 つの文字 (İ と ı) が小文字または大文字と一致しないことです。そのため、適切にラッピングできません。

より正確には:

  • i と İ は İ と一致しません (おそらく "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 に答える