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];

详解

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