iOS正则表达式

欢迎关注我的微博,一起学习进步

iOS正则表达式_第1张图片
timg.jpg

写在前面

一直在用正则表达式,基本上都是匹配国内手机号码、邮箱等,近期需要匹配其他国家电话、邮箱,正好自己研究一下正则表达式。
正则表达式由原意字符和元字符构成(原意字符表达字符原有意思,元字符则表达规定的特殊意义)
示例:^[0-9]+$
上面就是一个完整的正则表达式,表示 一个只能由0到9(包含0和9)的数字 组成的至少一位的字符串,下面我们就来一起看一下正则表达式的基本用法。

语法

正则语法中最基础的表达式符号有以下四个

^ $ ** . ** [ ]
指定字符串开头 指定字符串结尾 除 \r\n以外的 通配符 包含[]内的任意一个字符(至少1个)

(\r :回车; \n:换行 )

  • ^one 表示一个以“abc”开始的字符串("one people","one dog");
    类似于-(BOOL) hasPrefix:(NSString *) astring;
  • dog$:表示所以以”dog”结尾的字符串("a good dog","a bad dog");
    类似于:- (BOOL)hasSuffix:(NSString *) aString;
  • ^iPhone& 表示有且只有这一个不重复的字段,
    相当于==
  • originalCharactor 单纯的原意字符表示包含该字符串,
    相当于- (BOOL)containsString:(NSString *) aString,
  • "." 也就是“点”,匹配任何单个字符(不包括回车换行) 1.a 1后面跟任意一个字符再跟一个a("1Qa","1@a","12a")
  • [ab]字符串中有一个a或b ("a","b") __ 注意区分 __^[ab]$这是一个为"a"或"b"的字符串
    [a-d]:表示一个字符串包含小写的'a'到'd'中的一个;
    ^[a-zA-Z]:表示一个以字母开头的字符串;
    [0-9]a:表示a前有一位的数字;
    [a-zA-Z0-9]$:表示一个字符串以一个字母或数字结束。
{ } * + ?
{}前一字符出现次数由{}内数字决定 *前一字符出现 0-N次 +前一字符出现1-N次 ?前一字符出现0-1次

( ) 域段:可与其他字符结合使用,表示()内整个区域为一个整体

  • {}设置"{}"前一字符重复的具体范围。例如:
      “ab{4}”:字符串包含“一个a跟着4个b”(”abbbb”);
      “ab{1,}”:字符串包含“一个a跟着至少1个b”(”ab”,”abb”,”abbb”,……);
      “ab{2,5}”:表示一个字符串有一个a跟着2到5个b(”abb”,"abbb",”abbbb”,"abbbbb")。
  • ab*:字符串包含“一个a后面跟着0-N个b”("a", "ab", "abbb",……);
  • ab+:字符串包含“一个a后面跟着1-N个b”( "ab", "abbb",……);
  • ab?:字符串包含“一个a后面跟着0-1个b”( ”a”, “ab”);
  • 1(abc)* :字符串包含“1后跟着0个或若干个 abc ”("1","1abc","1abcabc",......);
    可以看出,*等价于{0,}+等价于{1,}?等价于{0,1}
    注:{}内可以没有上限,但是不能没有下限!例如“ab{,5}”是错误的写法

等价

由上文可以看出,在正则表达式中有些东西是等价的,等价是正则表达式中的重要概念,也是让初学者一脸懵逼的存在,但如果将等价恢复成原有语法记忆就比较简单了。

?,*,+,\d,\w 都是等价字符
“ | ”表示“或”操作,在[]内第一位使用用'^'表示匹配除[]内的其他字符

?等价于匹配长度{0,1}
  *等价于匹配长度{0,}
  +等价于匹配长度{1,}
  \d等价于[0-9]
  \D等价于[^0-9] :匹配一个非数字字符("aabbcd","@#$abcd")
  \w等价于[A-Za-z_0-9]
  \W等价于[^A-Za-z_0-9] :匹配 非字母数字 的字符

常用正则表达式

  • 匹配国内手机号
    正则表达式 ^1[3,4,5,7,8][0-9]{9}$(13/14/15/17/18开头,11位)
    iOS语法
    -(BOOL) validatePhoneNum:(NSString *) phoneNum { NSString *phoneRegex = @"^1[3,4,5,7,8][0-9]{9}$"; NSPredicate *phonePre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex]; return [phonePre evaluateWithObject:phoneNum]; }
  • 匹配邮箱
    正则表达式 ^[\w.%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$
    iOS语法 参考手机号
  • 匹配QQ号码:^[1-9][0-9]{4,14}$(5~15位,不能以0开头,只能是数字)
  • 匹配身份证:(^[0-9]{15}$)|([0-9]{17}[0-9X]$)(15位或18位身份证,18位身份证末位可能为X)

最后附上一个 在线正则表达式检查工具

https://regex101.com/#javascript

你可能感兴趣的:(iOS正则表达式)