我有一个正则表达式,用于搜索字符串,然后将它们包含在某些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>"];
答案 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;
}