zoukankan      html  css  js  c++  java
  • 便利的使用正则表达式截取字段

     1 + (NSString *)getJpmobMobAdUrlField:(NSString *)key withJpmobUrl:(NSString *)string
     2 {
     3     NSError * error = nil;
     4     NSString * regTags = [[NSString alloc] initWithFormat:@"(^|&|\?)+%@=+([^&]*)(&|$)",key];
     5     NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regTags
     6                                 options:NSRegularExpressionCaseInsensitive
     7                                    error:&error];
     8     // 执行匹配的过程
     9     NSArray *matches = [regex matchesInString:string
    10                                                           options:0
    11                                                             range:NSMakeRange(0, [string length])];
    12     for (NSTextCheckingResult *match in matches)
    13     {
    14         NSString *tagValue = [string substringWithRange:[match rangeAtIndex:2]]; 
    15         return tagValue;
    16     }
    17     return @"";
    18 }

     1.对于正则式匹配器的初始化创建入口

        /**

         *  pattern是正则表达式

         *  options是参数

         *  error双指针

         */

    + (nullable NSRegularExpression *)regularExpressionWithPattern:(NSString *)pattern options:(NSRegularExpressionOptions)options error:(NSError **)error;
    
    - (nullable instancetype)initWithPattern:(NSString *)pattern options:(NSRegularExpressionOptions)options error:(NSError **)error;

     具体参数枚举类型含义如下  

    typedef NS_OPTIONS(NSUInteger, NSRegularExpressionOptions) 
    {
       NSRegularExpressionCaseInsensitive             1 << 0//不区分字母大小写的模式
       NSRegularExpressionAllowCommentsAndWhitespace  = 1 << 1//忽略掉正则表达式中的空格和#号之后的字符
       NSRegularExpressionIgnoreMetacharacters        = 1 << 2//将正则表达式整体作为字符串处理
       NSRegularExpressionDotMatchesLineSeparators    = 1 << 3//允许.匹配任何字符,包括换行符  
       NSRegularExpressionAnchorsMatchLines           = 1 << 4//允许^和$符号匹配行的开头和结尾
       NSRegularExpressionUseUnixLineSeparators       = 1 << 5//设置
    为唯一的行分隔符,否则所有的都有效。
       NSRegularExpressionUseUnicodeWordBoundaries    = 1 << 6 //使用Unicode TR#29标准作为词的边界,否则所有传统正则表达式的词边界都有效
    };

    实现字段匹配方法具体如下

    - (NSArray<NSTextCheckingResult *> *)matchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

      参数options枚举类型含义为

    typedef NS_OPTIONS(NSUInteger, NSMatchingFlags) 
    {
       NSMatchingProgress               1 << 0//匹配到最长串是被设置     
       NSMatchingCompleted              = 1 << 1//全部分配完成后被设置    
       NSMatchingHitEnd                 = 1 << 2//匹配到设置范围的末尾时被设置   
       NSMatchingRequiredEnd            = 1 << 3//当前匹配到的字符串在匹配范围的末尾时被设置     
       NSMatchingInternalError          = 1 << 4  //由于错误导致的匹配失败时被设置   
    };

    最后匹配字段后的值,通过[match rangeAtIndex:2]得到该字段所在的range.字符截取得到所要的。输出结果如下

            /**
             *  原字串 wxOpenId=oJOMPs0XB_UH5sJaQ6VzRtpL3tMk&isWxFrom=0&isWxForm=0  59
             *  0     wxOpenId=oJOMPs0XB_UH5sJaQ6VzRtpL3tMk& {0,38}
             *  1     空                                     {0,0}
             *  2     oJOMPs0XB_UH5sJaQ6VzRtpL3tMk           {9,28}
             *  3     &                                      {37,1}
             */

      

  • 相关阅读:
    MyEclipse 2016CI破解版for Mac
    关于Mac系统中my sql 和navicat for mysql 的连接问题。
    二分总结
    递推总结
    区间DP学习笔记 6/20
    搜索考试
    模板整理
    防线 2020/3/31
    JS 循环遍历JSON数据
    pm am 12小时格式化
  • 原文地址:https://www.cnblogs.com/fuunnyy/p/5333507.html
Copyright © 2011-2022 走看看