【问题标题】:Using a regex or other mechanism to find tags in a NSAttributedString (or NSString)使用正则表达式或其他机制在 NSAttributedString(或 NSString)中查找标签
【发布时间】:2014-12-14 08:46:09
【问题描述】:

我有一个像这样的 NSAttributedString:

NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"EThis string shows my #tags. Click on a #tag now."];

我用什么来查找所有标签的位置和结尾?在 iOS 中是否有一个很好的正则表达式或其他更好的方法?

注意:我对标签的定义以 # 开头,以最后一个字母数字字符结尾。因此,句点 (.)、空格或破折号将结束标记。

谢谢。

【问题讨论】:

  • (#.*?)[. -]怎么样

标签: ios objective-c regex nsstring nsattributedstring


【解决方案1】:

好像你想要这样的东西,

#.*?[A-Za-z0-9](?=[.\\s-])

#.*?[A-Za-z0-9](?=[. -])

上述正则表达式将匹配所有以# 开头的字符串,然后匹配到第一个字母数字字符,该字符后面紧跟一个空格或点或破折号。

DEMO

【讨论】:

  • 我的分隔符是任何非数字的。我也可以得到每个标签的开始和长度吗?
  • My delimiter is anything that is not numeric ,我不知道你是什么意思..
  • 您的意思是数字还是字母数字?那么这个#[A-Za-z0-9]+ 就可以完成这项工作。
  • 如何在objective-c中获取字符串的开始和长度?
【解决方案2】:

如果要提取字符串,可以使用NSScanner 类,如下所示:-

NSMutableAttributedString *mtStr = [[NSMutableAttributedString alloc]initWithString:@"EThis string shows my #tags. Click on a #tag now."];
NSString *string = mtStr.string;
// Set up convenience variables for the start and end tag;
NSString *startTag = @"#";
NSString *endTag = @".";
NSString *title;
NSScanner *scanner = [NSScanner scannerWithString:string];
[scanner scanUpToString:startTag intoString:nil];
[scanner scanString:startTag intoString:nil];
[scanner scanUpToString:endTag intoString:&title];
NSLog(@"Value is: %@", title);

【讨论】:

    【解决方案3】:

    您需要的类是NSRegularExpression,而为您提供每场比赛的开始和长度的特定方法是matchesInString:options:range

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多