iOS正则表达式

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容

  • 一、什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式。正则表达式可以检测给定的字符串是否...
    Helen_kay阅读 2,756评论 0 2
  • 一、什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式。正则表达式可以检测给定的字符串是否...
    见哥哥长高了阅读 2,007评论 6 48
  • iOS -正则表达式的简单使用 ✨建议收藏,用到时候一查就明白了 下面两个方法我用的也不是很熟练,如果有懂得朋友欢...
    xx_cc阅读 8,559评论 17 177
  • iOS中使用正则表达式就不得不提NSRegularExpression,所以我们需要先搞清楚什么是NSRegula...
    sunmumu1222阅读 2,333评论 0 4
  • 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串...
    杰森_Jason阅读 873评论 0 0