在iOS中搜索带有括号的单词

在iOS中搜索带有括号的单词,第1张

概述我试图在一组文本中搜索带有括号的所有单词,并在iOS中将其更改为斜体.我正在使用此代码搜索文本中的括号: static inline NSRegularExpression * ParenthesisRegularExpression() { static NSRegularExpression *_parenthesisRegularExpression = nil; stat 我试图在一组文本中搜索带有括号的所有单词,并在iOS中将其更改为斜体.我正在使用此代码搜索文本中的括号:

static inline NSRegularExpression * ParenthesisRegularExpression() {    static NSRegularExpression *_parenthesisRegularExpression = nil;    static dispatch_once_t oncetoken;    dispatch_once(&oncetoken,^{        _parenthesisRegularExpression = [[NSRegularExpression alloc] initWithPattern:@"\[[^\(\)]+\]" options:NSRegularExpressionCaseInsensitive error:nil];    });    return _parenthesisRegularExpression;}

我用它来向我展示比赛:

NSRange matchRange = [result rangeAtIndex:0];Nsstring *matchString = [[self.markerPointInfoDictionary objectForKey:@"long_description"] substringWithRange:matchRange];NSLog(@"%@",matchString);

但它正在返回文本组中第一个[到最后一个]的所有文本.两者之间有很多括号.

我使用此代码将文本更改为斜体:

-(TTTAttributedLabel*)setItalicTextForLabel:(TTTAttributedLabel*)attributedLabel FontSize:(float)Size{    [attributedLabel setText:[self.markerPointInfoDictionary objectForKey:@"long_description"] afterinheritingLabelAttributesAndConfiguringWithBlock:^NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString)     {         NSRange stringRange = NSMakeRange(0,[mutableAttributedString length]);         NSRegularExpression *regexp = ParenthesisRegularExpression();         UIFont *italicSystemFont = [UIFont italicSystemFontOfSize:Size];         CTFontRef italicFont = CTFontCreateWithname((__brIDge CFStringRef)italicSystemFont.Fontname,italicSystemFont.pointSize,NulL);         [regexp enumerateMatchesInString:[mutableAttributedString string] options:0 range:stringRange usingBlock:^(NSTextCheckingResult *result,NSMatchingFlags flags,BOol *stop) {             NSRange matchRange = [result rangeAtIndex:0];             Nsstring *matchString = [[self.markerPointInfoDictionary objectForKey:@"long_description"] substringWithRange:matchRange];             NSLog(@"%@",matchString);             if (italicFont) {                 [mutableAttributedString removeAttribute:(Nsstring *)kCTFontAttributename range:result.range];                 [mutableAttributedString addAttribute:(Nsstring *)kCTFontAttributename value:(__brIDge ID)italicFont range:result.range];                 CFRelease(italicFont);                 NSRange range1 = NSMakeRange (result.range.location,1);                 NSRange range2 = NSMakeRange (result.range.location + result.range.length -2,1);                 [mutableAttributedString replaceCharactersInRange:range1 withString:@""];                 [mutableAttributedString replaceCharactersInRange:range2 withString:@""];             }         }];         return mutableAttributedString;     }];    return attributedLabel;}

顺便说一下,我的文字看起来像这样:

[hello] welcome [world],my [name] is [lakesh]

结果如下:

match string is [hello]match string is [world]match string is  is [lakthen crash..

需要一些指导来告诉我我的错误.

解决方法 我没有想过你正在展示的代码,但你的正则表达似乎太贪心了:

@"\[[^\(\)]+\]"

这匹配括号“[]”之间的1-n个字符.字符由一个字符类定义,该字符类表示“除了paranthesis之外的所有字符”,即“()”除外.

换句话说,您的角色类也匹配括号字符.结果是你的表达式匹配第一个“[”和最后一个“]”之间的所有内容.

我建议您尝试使用以下正则表达式:

@"\[[^\[\]]+\]"

如果您没有嵌套括号,您甚至可以将其简化为:

@"\[[^\]]+\]"

编辑

这是您提供的代码和示例输入文本的简化版本,但使用我建议的正则表达式.在我的环境中,这非常有效,它会在我的调试输出窗口中打印4行.我不知道是什么原因造成你的崩溃,所以我建议你一步一步地开始简化自己的代码,直到找到问题为止.

Nsstring* mutableAttributedString = @"[hello] welcome [world],my [name] is [lakesh]";NSRange stringRange = NSMakeRange(0,[mutableAttributedString length]);NSRegularExpression* regexp = [[NSRegularExpression alloc] initWithPattern:@"\[[^\]]+\]" options:NSRegularExpressionCaseInsensitive error:nil];[regexp enumerateMatchesInString:mutableAttributedString                         options:0                           range:stringRange                      usingBlock:^(NSTextCheckingResult *result,BOol *stop) {   NSRange matchRange = [result rangeAtIndex:0];   Nsstring* matchString = [mutableAttributedString substringWithRange:matchRange];   NSLog(@"%@",matchString); } ];

与您的代码的主要区别是:

>我不使用TTTAttributedLabel
>我不使用NSMutableAttributedString
>我不使用self.markerPointInfoDictionary
>我没有if(italicFont)代码块

所以你的问题应该在其中一个方面.

总结

以上是内存溢出为你收集整理的在iOS中搜索带有括号的单词全部内容,希望文章能够帮你解决在iOS中搜索带有括号的单词所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1076450.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存