010-正则表达式
⼀、简述
1.从概念上来说,正则表达式也是⼀门⼩巧⽽精炼的语⾔,它可以⽤来简化检索特定的字符串,替换特定字符等功能,有许多开发语⾔⼯具,都内嵌⽀持正则表达式。那么⼀个正则表达式,究竟是什么?其实它就是⼀个字符串,但这个字符串具有特定含义
2.在编写处理字符串的程序或⽹页时,经常会有查符合某些复杂规则的字符串的需要。正则表达式就是⽤于描述这些规则的⼯具。换句话说,正则表达式就是记录⽂本规则的代码
⼆、基础语法
1.字⾯值
字⾯值就是没有任何转义,查的对象就是其本⾝
例如:abc
表⽰:查的结果就是返回要查字符串中的a、b、c三个字母连在⼀起的字符串
查结果:abc
2.特殊字符(元字符)
1)句号.
句号在正则表达式中表⽰匹配除换⾏符以外的任意字符,相当于通配字符
例如:a.b
表⽰:可以到所有开头为a,结尾为b,中间为任意字符的字符串
查结果:a2b、avb、a%b
2)字符类[]
⼀些字符被[]括起来,表⽰某⼀个被括号中的属性约束的字符
例如:a[123456]b
表⽰:可以到所有开头为a,结尾为b,中间为1、2、3、4、5、6中的任意⼀个字符
查结果:a1b、a2b、a3b、a4b、a5b、a6b
注意:
a.在字符类中字符的顺序和重复性都不重要。[123]和[223331]含义是⼀样的
b.句号在字符类中表⽰的就是其本⾝。[.]就是查⼀个句号
3)区间符号-
如果我们需要查⼀个数字,[0123456789]可以达到⽬的,但是过于繁琐,这时候就可以⽤区间符号
例如:[0-9]
表⽰:查结果为数字
查结果:0、1、2、3、4...
例如:[a-zA-Z]
表⽰:查结果为字母(⼤写或⼩写)
查结果:a、c、G、H...
例如:[2-41]
表⽰:查结果为2、3、4中的任意⼀个或者是1,等价于[1-4]
查结果:1、2、3、4
注意:
a.区间的范围必须有意义。[a-1]⽆任何意义
b.区间左右两边对应的是字符,不是数字。[2-41]不是表⽰2到41这个区间,⽽是表⽰2到4的区间或字符1,等价于[1-4] 4)取反符号^
取反符号在正则表达式中表⽰取反
例如:[^a]
表⽰:查结果为除了a之外的任意字符
查结果:b、3、D、A...
注意:
a.取反符号必须在括号或字符类属性中使⽤
b.取反符号是将后⾯的整体作为取反条件的。[^a-zA-Z]表⽰字母除外的任意字符
5)简化的字符类
某些符号具有字符类相同的含义
\d 等价于[0-9]  表⽰数字
\w 等价于[0-9A-Za-z_]  表⽰数字、字母、下划线
\s 等价于匹配空格、tab、换⾏等不可见符
与此相对的\D、\W、\S,则表⽰上述条件的取反情况
6)乘法集{}
乘法集最⼤⽤处就是简化正则表达式,⽤⼤括号表⽰
例如:a{2}
表⽰:展开其实就是aa
查结果:aa
例如:[ab]{2}
表⽰:展开结果其实就是[ab][ab]
查结果:aa、ab、ba、bb
注意:
乘法集是以前⾯整体为乘法条件的
7)乘法集中的区间,
乘法集和字符类相同,也可以⽤区间进⾏简化,但是符号不相同
例如:a{1,3}
表⽰:展开可以为a,也可以是aa,同时还可以是aaa
查结果:a、aa、aaa
注意:
a."越长越好"属性:如a{2,4},如果我搜索myaaaa,它不会到aa后就停⽌,⽽是会到aaaa
b."全部获取"属性:如a{2.4},如果我搜索myaayouaaaa,它会到aa和aaaa
c.乘法集⽀持开区间:如a{1,}是合法的,表⽰到任意和a相连的字符串
8)判断符号?
这个符号的含义和{0,1}完全相同
例如:123?4
表⽰:等价于12[3]{0,1}4
查结果:124、1234
9)通配符号*
这个符号与{0,}相同。如.*表⽰通配⼀切字符串
10)加号+
重复⼀次或更多次
11)或|
表⽰或的关系
例如:abc|edf
regex匹配表⽰:到abc或edf
12)⼩括号()
⼩括号在正则表达式中表⽰组合,可以将⼩括号理解为优先级
例如:(a|b|c)d
表⽰:到ad、bd、cd
13)单词边界\b
\b表⽰单词的边界
例如:\b[a-z]{3}\b
表⽰:展开为\b[a-z][a-z][a-z]\b,匹配三个⼩写字母的单词
14)⾏边界^$
单单的⼀个^符号表⽰的是⾏的开头,$表⽰⾏的结束
注意:
[^]是⾮法的,[$]表⽰匹配的⼀个$符号
15)转义字符\
例如:\[\]
表⽰:查[]这个字符串
例如:\\
表⽰:查\这个字符串
三、代码实例
1#import"LDFrank.h"
2
3@implementation LDFrank
4
5#pragma mark - 验证⼿机号码
6// mobile ⼿机号字符串
7// 验证规则:^((13[0-9])|(15[^4])|(18[0-9]))\\d{8}$
8// ^((13[0-9])|(15[^4])|(18[0-9])) 开头三位字符为13[0-9]或15[^4]或18[0-9]
9// \\d{8}$ 结尾为任意的8个数字字符
10 + (BOOL)validateMobile:(NSString *)mobile
11 {
12//⼿机号以13, 15,18开头,⼋个 \d 数字字符
13    NSString *phoneRegex = @"^((13[0-9])|(15[^4])|(18[0-9]))\\d{8}$";
14    NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex]; 15return [phoneTest evaluateWithObject:mobile];
16 }
17
18#pragma mark - 验证车牌号
19// carNo 车牌号
20// 验证规则:^[\u4e00-\u9fa5]{1}[a-zA-Z]{1}[a-zA-Z_0-9]{4}[a-zA-Z_0-9_\u4e00-\u9fa5]$
21// ^[\u4e00-\u9fa5]{1} 开头为1位省会简称中⽂字符
22// [a-zA-Z]{1} 紧接着就是1位字母(⼤写或⼩写)字符
23// [a-zA-Z_0-9]{4} 紧接着4位数字或字母(⼤写或⼩写)或下划线字符
24// [a-zA-Z_0-9_\u4e00-\u9fa5]$ 结尾是1位数字或字母(⼤写或⼩写)或下划线或中⽂字符
25 + (BOOL)validateCarNo:(NSString *)carNo
26 {
27    NSString *carRegex = @"^[\u4e00-\u9fa5]{1}[a-zA-Z]{1}[a-zA-Z_0-9]{4}[a-zA-Z_0-9_\u4e00-\u9fa5]$";
28    NSPredicate *carTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",carRegex];
29    NSLog(@"carTest is %@",carTest);
30return [carTest evaluateWithObject:carNo];
31 }
32
33#pragma mark - 验证车型
34// carType 车型字符串
35// 验证规则:^[\u4E00-\u9FFF]+$
36// ^[\u4E00-\u9FFF]+$ 任意个数的中⽂
37 + (BOOL)validateCarType:(NSString *)carType
38 {
39    NSString *carTypeRegex = @"^[\u4E00-\u9FFF]+$";
40    NSPredicate *carTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",carTypeRegex]; 41return [carTest evaluateWithObject:carType];
42 }
43
44#pragma mark - 验证邮箱
45// email 邮箱字符串
46// 验证规则:[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}
47// [A-Z0-9a-z._%+-]+ 字母(⼤写或⼩写)、数字、句号、下划线、百分号、加号、减号随意重复
48// @ 紧跟着@符号
49// [A-Za-z0-9.-]+ 字母(⼤写或⼩写)、数字随意重复
50// \\. 紧跟着是⼀个句号
51// [A-Za-z]{2,4} 字母(⼤写或⼩写)重复2到4遍
52 + (BOOL)validateEmail:(NSString *)email
53 {
54    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
55    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 56return [emailTest evaluateWithObject:email];
57 }
58
59@end

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。