• iOS 正则表达式 配合 RegexKitLite 使用


    
    
      1 简介:
      2 
      3   正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
      4 
      5 
      6 . :匹配任何单个字符。例如正则表达式“b.g”能匹配如下字符串:“big”、“bug”、“b g”,但是不匹配“buug”,“b..g”可以匹配“buug”。
      7 [ ] :匹配括号中的任何一个字符。例如正则表达式“b[aui]g”匹配bug、big和bag,但是不匹配beg、baug。可以在括号中使用连字符“-”来指定字符的区间来简化表示,例如正则表达式[0-9]可以匹配任何数字字符,这样正则表达式“a[0-9]c”等价于“a[0123456789]c”就可以匹配“a0c”、“a1c”、“a2c”等字符串;还可以制定多个区间,例如“[A-Za-z]”可以匹配任何大小写字母,“[A-Za-z0-9]”可以匹配任何的大小写字母或者数字。 
      8 | :将两个匹配条件进行逻辑“或”运算。'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
      9 
     10 
     11 ( ) :将 () 之间括起来的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域,这个元字符在字符串提取的时候非常有用。把一些字符表示为一个整体。改变优先级、定义提取组两个作用。
     12 *:匹配0至多个在它之前的子表达式,和通配符*没关系。例如正则表达式“zo*”能匹配 “z” 、“zo”以及 “zoo”;因此“.*”意味着能够匹配任意字符串。"z(b|c)*"→zb、zbc、zcb、zccc、zbbbccc。"z(ab)*"能匹配z、zab、zabab(用括号改变优先级)。
     13 + :匹配前面的子表达式一次或多次,和*对比(0到多次)。例如正则表达式9+匹配9、99、999等。 “zo+”能匹配 “zo”以及 “zoo” ,不能匹配"z"。
     14 
     15 
     16 ? :匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 。一般用来匹配“可选部分”。
     17 {n} :匹配确定的 n 次。“zo{2}”→zoo。例如,“e{2}” 不能匹配“bed”中的“e”,但是能匹配“seed”中的两个“e”。 
     18 {n,} :至少匹配n次。例如,“e{2,}”不能匹配“bed”中的“e”,但能匹配 “seeeeeeeed”中的所有“e”。
     19 {n,m} :最少匹配 n 次且最多匹配 m 次。“e{1,3}”将匹配“seeeeeeeed”中的前三个“e”。
     20 
     21 
     22 ^: 非运算 a[^b] 除了b以为的字符
     23  d:代表一个数字,等同于[0-9]
     24  D:代表非数字,等同于[^0-9]  
     25 s:代表换行符、Tab制表符等空白字符 
     26 S:代表非空白字符  
     27 w:匹配字母或数字或下划线或汉字,即能组成单词的字符 
     28 W:非w ,等同于[^w] 
     29 
     30 
     31 
     32 
     33 
     34 
     35 
     36 
     37 - (void)viewDidLoad
     38 {
     39     [super viewDidLoad];
     40     // Do any additional setup after loading the view, typically from a nib.
     41     
     42     //正则表达式
     43     //.是匹配任意一个字符
     44     NSString *text = @"ab";
     45     NSString *regex = @"a.b";
     46     //[self evaluateWithStr:text regex:regex];
     47 //    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
     48 //    
     49 //    if([predicate evaluateWithObject:text]){
     50 //        NSLog(@"匹配要求");
     51 //    }else{
     52 //        NSLog(@"不匹配要求");
     53 //    }
     54     
     55     //[]匹配括号中的任何一个字符。
     56     [self evaluateWithStr:@"ac" regex:@"a[a-z]"];
     57     
     58     //| :将两个匹配条件进行逻辑 ()之间括起来的表达式定义为“组”(group)
     59     [self evaluateWithStr:@"ab" regex:@"a(a|b)"];
     60     
     61     //*:匹配0至多个在它之前的子表达式
     62     [self evaluateWithStr:@"a" regex:@"a*"];
     63     
     64     //+ :匹配前面的子表达式一次或多次
     65     [self evaluateWithStr:@"aa" regex:@"a+"];
     66     
     67     
     68     //? :匹配前面的子表达式零次或一次
     69     [self evaluateWithStr:@"do" regex:@"do(es)?"];
     70     
     71     
     72     //{n} :匹配确定的 n 次
     73     [self evaluateWithStr:@"doooo" regex:@"do{3}"];
     74     
     75     //{n,} :匹配至少n 次
     76     [self evaluateWithStr:@"dooo" regex:@"do{3,}"];
     77     
     78     //{n,m} :匹配n - m 次
     79     [self evaluateWithStr:@"doooo" regex:@"do{2,3}"];
     80     
     81     // d:代表一个数字
     82     [self evaluateWithStr:@"2234" regex:@"\d*"];
     83     
     84     //w:匹配字母或数字或下划线或汉字
     85     [self evaluateWithStr:@"2" regex:@"\w"];
     86     
     87     //写一个邮箱的表达
     88     //itcast01@itcast.com.cn.cn
     89     [self evaluateWithStr:@"abc_def@itcast.com.cn" regex:@"[A-Za-z0-9_]*@[A-Za-z0-9]*(\.[A-Za-z]*){1,2}"];
     90     
     91 }
     92 
     93 
     94 -(void)evaluateWithStr:(NSString *)str regex:(NSString *)regex{
     95     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
     96     
     97     if([predicate evaluateWithObject:str]){
     98         NSLog(@"匹配要求");
     99     }else{
    100         NSLog(@"不匹配要求");
    101     }
    102 }


    正则表达式 0> 匹配 -------------------------------------------------------------------------------- (pattern) 匹配pattern并获取这一匹配,所获取的匹配可以从产生的Matches集合得到 1> 集合 -------------------------------------------------------------------------------- [xyz] 字符集合(x/y或z) [a-z] 字符范围 [a-zA-Z] [^xyz] 负值字符集合 (任何字符, 除了xyz) [^a-z] 负值字符范围 [a-d][m-p] 并集(a到d 或 m到p) 2> 常用元字符 -------------------------------------------------------------------------------- . 匹配除换行符以外的任意字符 w 匹配字母或数字或下划线或汉字 [a-zA-Z_0-9] s 匹配任意的空白符(空格、TAB 、回车 ) d 匹配数字 [0-9] ^ 匹配字符串的开始 $ 匹配字符串的结束  匹配单词的开始或结束 2> 常用反义符 -------------------------------------------------------------------------------- W 匹配任意不是字母,数字,下划线,汉字的字符[^w] S 匹配任意不是空白符的字符 [^s] D 匹配任意非数字的字符[^0-9] B 匹配不是单词开头或结束的位置 [^x] 匹配除了x以外的任意字符 [^aeiou] 匹配除了aeiou这几个字母以外的任意字符 4> 常用限定符 -------------------------------------------------------------------------------- * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次, 5> 贪婪和懒惰 -------------------------------------------------------------------------------- *? 重复任意次,但尽可能少重复 *+ 重复1次或更多次,但尽可能少重复 ?? 重复0次或1次,但尽可能少重复 {n,m}? 重复n到m次,但尽可能少重复 {n,}? 重复n次以上,但尽可能少重复 RegexKitLite 库 地址:https://github.com/wezm/RegexKitLite.git 如果你的电脑配置了git 则可以使用以下命令克隆下来 cd /下载存放目录地址 git clone https://github.com/wezm/RegexKitLite.git 使用注意点 将RegexKitLite导入到Xcode 项目中的时候会出现错误 解决步骤 1,点击targets -> build phases -> compile sources 双加RegexKitLite.m 输入"-fno-objc-arc" 2、添加系统自带库 libicucore 按照上述步骤即可编译正常



    //常用表达式
    1、匹配座机 (0[d]{3}-[d]{8})|(0[d]{3}-[d]{7})--------- 解读 | 是代表或者的意思, (0开始[d]{3}匹配三位数字-[d]{7}匹配数字7次)
  • 相关阅读:
    二叉搜索树的java实现
    HashMap源码分析
    集合之LinkedList源码分析
    集合之ArrayList的源码分析
    CountDownLatch源码解析
    部署java项目到阿里云服务器(centos7版本)
    并发中的单例模式
    AbstractQueuedSynchronizer的简单分析
    ThreadPoolExecutor的分析(二)
    ThinkPHP5 与 ThinkPHP3.* 之间的使用差异
  • 原文地址:https://www.cnblogs.com/ndyBlog/p/5016512.html
Copyright © 2020-2023  润新知