iOS 正则表明(一) 标签的处理

先是你需要第三方Regex基特(Kit)Lite以及YY基特

1. 我们先来说说Regex基特(Kit)Lite的导入

您可以在github上下载并导入你的花色,也足以用cocopods导入。

  • 使用cocopods
这样相对来说比较简单,不用管其他配置了
  • 从github下载
    RegexKitLite导入你的系列中,然后你需要安排以下:

    Build Phases需要配备


2. 至于YY基特(Kit),同样你可以挑选手动导入或者cocopods第三方管理工具
  • 使用cocopods
  1. 在podfile中添加 pod ‘YYKit’
  2. 执行pod install
  • 手动安装
  1. 下载YYKit并将YY基特(Kit)中源文件拖放如您的工程
  • 为 NSObject+YYAddForARC.m 和 NSThread+YYAdd.m 添加编译参数
    -fno-objc-arc
  • 链接以下 frameworks:
  • UIKit
  • CoreFoundation
  • CoreText
  • CoreGraphics
  • CoreImage
  • QuartzCore
  • ImageIO
  • AssetsLibrary
  • Accelerate
  • MobileCoreServices
  • SystemConfiguration
  • sqlite3
  • libz

接下去就是大家需要做的就是代码搞起来

1. 导入头文件
#import "RegexKitLite.h"
#import "YYKit.h"
2. 生死攸关代码
NSString *regex_http = @"<a href=(?:.*?)>(.*?)<\\/a>";
    NSString *labelText = @"<a href=\"http://www.baidu.com\" target=\"_blank\">快件查询页面</a>";
    NSArray *array_http = [labelText arrayOfCaptureComponentsMatchedByRegex:regex_http];

    // 高亮状态的背景
    YYTextBorder *highlightBorder = [YYTextBorder new];
    highlightBorder.insets = UIEdgeInsetsMake(-2, 0, -2, 0);
    highlightBorder.cornerRadius = 3;
    highlightBorder.fillColor = [UIColor lightGrayColor];

    if ([array_http count]) {
        // 先把html a标签都给去掉
        labelText = [labelText stringByReplacingOccurrencesOfString:@"<a href=(.*?)>" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange (0, labelText.length)];
        labelText = [labelText stringByReplacingOccurrencesOfString:@"<\\/a>" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange (0, labelText.length)];
        NSLog(@"labelText === %@", labelText);

        NSMutableAttributedString *aStr = [[NSMutableAttributedString alloc] initWithString:labelText];
        aStr.font = [UIFont systemFontOfSize:14];
        aStr.color = [UIColor blackColor];
        for (NSArray *array in array_http) {
            // 获得链接显示文字的range,用来设置下划线
            NSRange range = [labelText rangeOfString:array[1]];
            [aStr setColor:[UIColor blueColor] range:range];

            // 高亮状态
            YYTextHighlight *highlight = [YYTextHighlight new];
            [highlight setBackgroundBorder:highlightBorder];
            // 数据信息,用于稍后用户点击
            NSString *linkStr = [array.firstObject componentsSeparatedByString:@"\""][1];
            highlight.userInfo = @{@"linkUrl": linkStr};
            [aStr setTextHighlight:highlight range:range];
        }

        _herfLabel.attributedText = aStr;
    }

    _herfLabel.highlightTapAction = ^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect){
        text = [text attributedSubstringFromRange:range];
        NSDictionary *dic = text.attributes;
        YYTextHighlight *user = [dic valueForKey:@"YYTextHighlight"];
        NSString *linkText = [user.userInfo valueForKey:@"linkUrl"];
        NSLog(@"获取的linkText:%@  在这里可以跳转界面", linkText);
    };

提示:_herfLabel是YYLabel,不是常常的UILabel

说到底,下次有时光会附着demo。

网站地图xml地图