zoukankan      html  css  js  c++  java
  • iOS 和Android中的正则表达式简单使用

    ios 中需要使用NSRegularExpression类,NSTextCheckingResult类。

    下面给出最基本的实现代码

     NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(a.*)(b)" options:NSRegularExpressionCaseInsensitive error:nil];
        
        
        __block NSUInteger count = 0;
        NSString *string = @" ab  ab   ab ";
        [regex enumerateMatchesInString:string options:0 range:NSMakeRange(0, [string                                                                           length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){
            NSLog(@"---------------------------find one match!");
            
            NSRange matchRange = [match range];
            NSRange firstHalfRange = [match rangeAtIndex:1];
            NSRange secondHalfRange = [match rangeAtIndex:2];
            
            NSLog(@"the string is %@",[string substringWithRange:matchRange]);
            NSLog(@"firstHalfRange is %@",[string substringWithRange:firstHalfRange]);
            NSLog(@"secondHalfRange is %@",[string substringWithRange:secondHalfRange]);
            
            
            
            if (++count >= 100) *stop = YES;
        }];

    它的结果如下

    这里每个rang的含义如下,matchRange表示找到的每个匹配串的总体位置,firstHalfRange则表示第一个表达式(a.*)的匹配范围,当然这个范围是总范围的一部分。关于为什么匹配到 "ab   ab     ab" 而不是 ab,这根据系统的处理方法而定,可能有方法进行设定,没有研究过。

    如果仅仅想处理第一个匹配的结果,那么可以使用以下的代码,这种比较常用

    NSTextCheckingResult *match = [regex firstMatchInString:string
                                                    options:0
                                                      range:NSMakeRange(0, [string
    length])];
    if (match) {
        NSRange matchRange = [match range];
        NSRange firstHalfRange = [match rangeAtIndex:1];
        NSRange secondHalfRange = [match rangeAtIndex:2];
    } }

    需要注意, ios的字符串由于存在转义字符\, 所以   要写成 \b,  还有当需要使用+ .  这种已经被定义为特殊含义的符号时, 也需要进行转义 \+   \.

    正则表达式中*的使用小注意

    今天要匹配"/Date(1407785755000)/"中的数字,我用了"\d*" ,之后匹配到了结果,但是结果的range是(0,0)。其实,应该使用 

    "\d+",以后单独使用*时要多多注意,*可以代表0个,所以就是"\d*"可以代表空字符串。

    正则表达式里"-"中划线的使用注意

    今天要匹配正则表达式,把非法的字符找出来,开始的写法是这个

    [^A-Za-z0-9_.*-+%!],我的目的是把_.*-+%!这7个字符算合法字符,但是发现有许多其他字符也合法了,原来是中划线的位置不对,应该这样写

    [^A-Za-z0-9_.*+%!-],在中间放的中划线会被识别为连接符,表示一个范围。


    Android中需要使用Pattern 和Matcher2个类,其实和ios的基本思路是一致的!

     String patternStr = "[0-9:]*";
    
     Pattern p = Pattern.compile(patternStr);
    
     Matcher m = p.matcher(originalStr);
    
     if (m.find()) {
             returnStr = m.group(0);
     }
  • 相关阅读:
    盘点三个网络赚零花钱的小项目,傻瓜式操作
    如何运营一个女性社区?
    女性社区TOP10
    微商怎么做月入过万?新手必看
    电脑设置 账号改名,远程无法复制
    sql server 安装
    C# HTTP
    电脑命令 重启电脑
    使用老毛桃备份 ,还原系统
    c# 截取字符串
  • 原文地址:https://www.cnblogs.com/breezemist/p/3539729.html
Copyright © 2011-2022 走看看