正则

正则相关

Posted on 2020-09-08,3 min read
封面图

对正则了解不多,在此记录一下平时经常用到的表达式&修饰符

1 匹配规则

参考文章:正则表达式 - 匹配规则
例:校验字符串中是否包含 ':', ';', '/', '', '%', '`'

NSString *nameRegex = @"^[^:;\\\\/%`]+$";
NSPredicate *namePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",nameRegex];
return [namePredicate evaluateWithObject:name];

1.1 基本匹配模式

  • $符号
    表示结尾:例如bucket$,匹配‘in a bucket’,而不匹配‘buckets’

  • ^符号
    有2个含义:

    1. "开头",以^abc为例:匹配以abc开头的字符串
    2. "非"或"排除",以^[^abc]+$为例:从,不包含(排除)a、b、c的字符串

1.2 字符簇

  • 简单说就是用来描述我们匹配模式的方法,书写方式为[.....]
    [a-z] //匹配所有的小写字母 
    [A-Z] //匹配所有的大写字母 
    [a-zA-Z] //匹配所有的字母 
    [0-9] //匹配所有的数字 
    [0-9\.\-] //匹配所有的数字,句号和减号 
    [ \f\r\t\n] //匹配所有的白字符
    [^a-z] //除了小写字母以外的所有字符 
    [^\\\/\^] //除了(\)(/)(^)之外的所有字符 
    [^\"\'] //除了双引号(")和单引号(')之外的所有字符
    
  • 举个栗子🌰,匹配一个小写字母和一个数字组成的字符串,如‘a1’、‘b2’,但不是"ab2":
    ^[a-z][0-9]$
    
  • 再举个栗子🌰,同样匹配2个字符的字符串,第一个不是数字,第二个是数字,如‘#1’、‘R2’:
    ^[^0-9][0-9]$
    

2 元字符

参考文章:正则表达式 - 元字符
这里组合演示了:

  • ?<= : xx之后
    例:?<=href 表示 匹配 href之后 (不包含href)

  • ?= : xx之前
    例: ?=href 表示 匹配 href之前 (包含href)

  • .*? : 取尽量少的任意字符

    注:.代表的是任意字符。* 代表的是取 0 至 无限长度。代表的是非贪婪模式。

    例子,CFBundleDisplayName="MUZO Player";字符串中,我想获取MUZO Player:

    (?<=CFBundleDisplayName=").*?(?=")
    
  • ?<! : 不以xx开头
    例子,遍历字符串文件时,想过滤掉 //"adddevice_test"="test";这种字串:

    // 不以(//)开头,并且格式为("xxx"可能存在空格=可能存在空格"xxx";)
    (?<!//)".*?" ?= ?”.*?”;  
    

下一篇: 使用 Gridea+Github Pages 搭建个人博客→

loading...