OC 正则表达式详解

前言:

正则表达式通常用于两种任务:1.验证,2.搜索/替换。用于验证时,通常需要在前后分别加上 ^ 和 ,以匹配整个待验证字符串;搜索/替换时是否加上此限定则根据搜索的要求而定,此外,也有可能要在前后加上\b而不是^和。此表所列的常用正则表达式,除个别外均未在前后加上任何限定,请根据需要,自行处理。


1.正则表达式:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串,简单说,就是我们写个模板,然后去匹配字符串。

下面我们来看看一些基本的正则表达式的语法:

语法 释义
\ 将下个字符标记为一个特殊的字符、一个原义字符、一个向后引用或者一个八进制转义符例如“\n”就是匹配一个换行符
^ 匹配开始位置, ^(a)这个就匹配开头必须为a
$ 匹配结束位置,$(a)这个就匹配结尾必须为a
* 匹配前面的子表达式零次或者多次,如“xu*”这个表达式就能够匹配“x”和“xuu”
+ 匹配前面的子表达式一次或者多次,如“xu+”这个表达式就能够匹配“xuu”和“xu”,但不能够匹配“x”,这个就是和“*”的区别
? 匹配前面的子表达式零次或者一次,如“xu?”这个表达式就能够匹配“jian(guo)?”就可以匹配“jian”和“jianguo”
{n} n是一个非负数,匹配n次,如“guo{2}”,可以匹配“guoo”,不能匹配“guo”
{n,} n是一个非负数,匹配至少n次
{n, m} m、n都是非负数,最少匹配n次,最多匹配m次
(pattern) 匹配pattern并获取匹配结果
(?:pattern) 匹配pattern但不获取匹配结果
[xyz] 字符集合,匹配所包含的任意字符。如“[abc]”可以匹配“apple”中的“a”
[^xyz] 匹配未被包含的字符
[a-z] 字符范围,匹配指定范围内的任意字符
[^a-z] 匹配指定不在范围内的任意字符
\b 匹配一个单词的边界,如“guo\b”可以匹配“xujianguo”中的“guo”
\B 匹配非单词边界,如“jian\B”可以匹配“xujianguo”中的“jian”
\d 匹配一个数字字符,等价于“[0-9]”
\D 匹配一个非数字字符
\f 匹配一个换页符
\n 匹配一个换行符
\r 匹配一个回车符
\s 匹配任何空白字符

x|y : 匹配x或y,如“(xu|jian)guo”匹配“xuguo”或者“jianguo”


2.常用正则表达式

  • 网址(URL) : [a-zA-z]+://[^\s]*
  • IP地址(IP Address) : ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
  • 电子邮件(Email) : \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
    QQ号码 | [1-9]\d{4,}
  • HTML标记(包含内容或自闭合) : <(.*)(.*)>.*<\/\1>|<(.*) \/>
  • 密码(由数字/大写字母/小写字母/标点符号组成,四种都必有,8位以上) : (?=^.{8,}$)(?=.*\d)(?=.*\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\n).*$
  • 日期(年-月-日) : (\d{4}|\d{2})-((1[0-2])|(0?[1-9]))-(([12][0-9])|(3[01])|(0?[1-9]))
  • 日期(月/日/年) : ((1[0-2])|(0?[1-9]))/(([12][0-9])|(3[01])|(0?[1-9]))/(\d{4}|\d{2})
  • 时间(小时:分钟, 24小时制) : ((1|0?)[0-9]|2[0-3]):([0-5][0-9])
  • 汉字(字符) : [\u4e00-\u9fa5]
  • 中文及全角标点符号(字符) : [\u3000-\u301e\ufe10-\ufe19\ufe30-\ufe44\ufe50-\ufe6b\uff01-\uffee]
  • 中国大陆固定电话号码 : (\d{4}-|\d{3}-)?(\d{8}|\d{7})
  • 中国大陆手机号码 : 1\d{10}
  • 中国大陆邮政编码 : [1-9]\d{5}
  • 中国大陆身份证号(15位或18位) : \d{15}(\d\d[0-9xX])?
  • 非负整数(正整数或零) : \d+
  • 正整数 : [0-9]*[1-9][0-9]*
  • 负整数 : -[0-9]*[1-9][0-9]*
  • 整数 : -?\d+
  • 小数 : (-?\d+)(\.\d+)?
  • 不包含abc的单词 : \b((?!abc)\w)+\b

3.日常OC正则表达式

  • 匹配9-15个由字母/数字组成的字符串的正则表达式:
  NSString * regex = @"^[A-Za-z0-9]{9,15}$";
  NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
  BOOL isMatch = [pred evaluateWithObject:txtfldPhoneNumber.text];
  • 匹配由中文、字母或数字组成
    NSString *regex = @"[a-zA-Z\u4e00-\u9fa5][a-zA-Z0-9\u4e00-\u9fa5]+";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
  • 匹配中文、英文、数字、_、-、.及()且长度1到30
    NSString *regex = @"(?=^.{1,30}$)(?:[\u4e00-\u9fa5A-Za-z0-9_.()()\-]+)";
    NSPredicate *pre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
    
    BOOL ismatch = [pre evaluateWithObject:text];

详解

你可能感兴趣的:(OC 正则表达式详解)