iOS Developer程序员

iOS正则表达式

2017-06-16  本文已影响102人  blackJokerZ

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

timg.jpg

写在前面

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

语法

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

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

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

  • ^one 表示一个以“abc”开始的字符串("one people","one dog");
    类似于-(BOOL) hasPrefix:(NSString *) astring;
{ } * + ?
{}前一字符出现次数由{}内数字决定 *前一字符出现 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")。

等价

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

?,*,+,\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]; }

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

https://regex101.com/#javascript

上一篇 下一篇

猜你喜欢

热点阅读