正则表达式复习总结

2017-10-08  本文已影响6人  Rui哥

项目代码:
更多语法参考正则百科

图文混排参考

NSDataDetector

正则表达式常用符号含义:

一.单个字符匹配

二. 多个字符匹配

三.位置匹配表示


二、正则匹配字符串位置的使用


    func myReg() {
        //1. 待匹配的字符串
        let rawStr = "abcaaaaabc"
        
        //2. 正则匹配的样式
        let pattern = "abc" 
       
      //3.创建正则表达式
        guard let regex =  try? NSRegularExpression(pattern: pattern, options: []) else {
            print("创建正则表达式失败")
            return
        }

        //4. 使用正则表达式匹配字符串
        let resultArr  =  regex.matches(in: rawStr, options: [], range: NSRange(location: 0, length: (rawStr as NSString).length))
        
        //4. 获取匹配出的结果
        for result in resultArr {
            let resultStr = (rawStr as NSString).substring(with: result.range)
            print("匹配结果字符串:\(resultStr),匹配结果字符串范围: \(result.range)")
        }
        
        if resultArr.count == 0{
            print("匹配失败")
        }
        
    }
    
@interface NSString (EmojiRegex)

/** 给定字符串和正则表达式,匹配出所有满足条件的字符串
 返回值: 满足 正则表达式样式的 subString 的NSArray
 参数:regPattern 正则表达式的样式
 */
-(NSArray<NSString *> *)subStringArrWithPattern:(NSString *)regPattern;

/** 给定字符串和正则表达式,匹配出所有满足条件的字符串的位置字符串
 返回值: 满足 正则表达式样式的 subString 的NSRange
 参数:regPattern 正则表达式的样式
 */
-(NSArray<NSString *> *)subStringRangeArrWithPattern:(NSString *)regPattern;
    
@end



@implementation NSString (EmojiRegex)


/** 给定字符串和正则表达式,匹配出所有满足条件的字符串
 返回值: 满足 正则表达式样式的 subString 的NSArray
 参数:regPattern 正则表达式的样式
 */
-(NSArray<NSString *> *)subStringArrWithPattern:(NSString *)regPattern{
    
    NSArray *rangeStrArr = [self subStringRangeArrWithPattern:regPattern];;

    NSMutableArray *patternStrArrM = [NSMutableArray array];
    for (NSString *rangeStr in rangeStrArr) {
        NSRange range = NSRangeFromString(rangeStr);
        NSString *str = [self substringWithRange:range];
        [patternStrArrM addObject:str];
    }


    return patternStrArrM;
}

/** 给定字符串和正则表达式,匹配出所有满足条件的字符串的位置字符串
 返回值: 满足 正则表达式样式的 subString 的NSRange
 参数:regPattern 正则表达式的样式
 */
-(NSArray<NSString *> *)subStringRangeArrWithPattern:(NSString *)regPattern{
    
    NSError *err = nil;
    NSRegularExpression *regExp = [[NSRegularExpression alloc]initWithPattern:regPattern options:kNilOptions error:&err];
    
    if (err != nil) {
        NSLog(@"创建正则表达式失败");
        return nil;
    }
    
    
    NSArray<NSTextCheckingResult *> *resultArr= [regExp matchesInString:self options:kNilOptions range:NSMakeRange(0, self.length)];
    
    NSMutableArray *rangeStrArrM = [NSMutableArray array];
    for (NSTextCheckingResult *result in resultArr) {
        NSRange range = [result range];
        [rangeStrArrM addObject:NSStringFromRange(range)];
        
    }
    return rangeStrArrM;
}
@end

三、正则表达式实践

// 匹配网址:
    NSString *rawStr = @"点击参考网址:http://www.baidu.com 查看详情http://www.baidu.com2";
    NSString *pattern = @"http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?";
 
    NSArray *subStrArr = [rawStr subStringArrWithPattern:pattern];
   
    if (subStrArr.count > 0) {
        NSLog(@"匹配结果如下:");
    
        for (NSString *subStr in subStrArr) {
            NSLog(@"%@",subStr);
        }
    }
    else{
        NSLog(@"-------匹配 失败了--------");
    }

结果:

http://www.baidu.com 
http://www.baidu.com2
    NSString *rawStr = @"点击参考网址:#http://www.baidu.com#查看详情#http://www.baidu.com2# #http://www.baidu.com#";
    NSString *pattern = @"#http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?#";
 
    NSArray *subStrArr = [rawStr subStringArrWithPattern:pattern];
   
    if (subStrArr.count > 0) {
        NSLog(@"匹配结果如下:");
    
        for (NSString *subStr in subStrArr) {
            NSLog(@"%@",subStr);
        }
    }
    else{
        NSLog(@"-------匹配 失败了--------");
    }

结果:

#http://www.baidu.com#
#http://www.baidu.com2#
#http://www.baidu.com#
 /** 表情  [吃惊] [好爱哦]

     */
    NSString *rawStr = @"@zhangsan:【成都新闻】 #春熙路#宁夏街[偷笑],@张老五:老西门,城东们[吃惊]@西门吹雪:皮读取#碧波园#白桥[好爱哦]~~~http://baidu.com.news";
    NSString *pattern = @"\\[.*?\\]";
 
    
    NSArray *subStrArr = [rawStr subStringArrWithPattern:pattern];
   
    if (subStrArr.count > 0) {
        NSLog(@"匹配结果如下:");
    
        for (NSString *subStr in subStrArr) {
            NSLog(@"%@",subStr);
        }
    }
    else{
        NSLog(@"-------匹配 失败了--------");
    }

结果:

 [偷笑]
 [吃惊]
[好爱哦]
/** 表情  [吃惊] [好爱哦]
     */
    NSString *rawStr = @"@zhangsan:【成都新闻】 #春熙路#宁夏街[偷笑],@张老五:老西门,城东们[吃惊]@西门吹雪:皮读取#碧波园#白桥[好爱哦]~~~http://baidu.com.news";
    NSString *pattern = @"\\[.*?\\]";
 
    NSArray *rangArr = [rawStr subStringRangeArrWithPattern:pattern];
    
    if (rangArr.count > 0) {
        for (NSString *rangStr in rangArr) {
            NSLog(@"rangStr:%@",rangStr);
        }
    }
    else{
        NSLog(@"---rangArr----匹配 失败了--------");
    }

结果:

rangStr:{25, 4}
rangStr:{42, 4}
rangStr:{62, 5}
上一篇 下一篇

猜你喜欢

热点阅读