何谓正则表达式
正则表达式(regular expression),在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
正则表达式组成
正则表达式有两种类型的字符组成
第一种:用来匹配的字符,或者叫常规字符
第二种:控制字符或具有特殊含义的元字符
iphone 4.0以后就开始支持正则表达式的使用了,在ios4.0中正则表达式的使用是使用NSRegularExpression类来调用。
1. 下面一个简单的使用正则表达式的一个例子:NSRegularExpression 类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
-(void)parseString{ //组装一个字符串,需要把里面的网址解析出来 NSString *urlString=@ "sfdsfhttp://www.baidu.com" ; //NSRegularExpression类里面调用表达的方法需要传递一个NSError的参数。下面定义一个 NSError *error; //http+:[^\\s]* 这个表达式是检测一个网址的。 NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@ "http+:[^\\s]*" options:0 error:&error]; if (regex != nil) { NSTextCheckingResult *firstMatch=[regex firstMatchInString:urlString options:0range:NSMakeRange(0, [urlString length])]; if (firstMatch) { NSRange resultRange = [firstMatch rangeAtIndex:0]; //等同于 firstMatch.range --- 相匹配的范围 //从urlString当中截取数据 NSString *result=[urlString substringWithRange:resultRange]; //输出结果 NSLog(@ "%@" ,result); } } } |
2.使用正则表达式来判断
1
2
3
4
5
6
7
8
|
//初始化一个NSRegularExpression 对象,并设置检测对象范围为:0-9 NSRegularExpression *regex2 = [NSRegularExpression regularExpressionWithPattern:@ "^[0-9]*$" options:0 error:nil]; if (regex2) { //对象进行匹配 NSTextCheckingResult *result2 = [regex2 firstMatchInString:textField.text options:0 range:NSMakeRange(0, [textField.text length])]; if (result2) { } } |
1.判断邮箱格式是否正确的代码:NSPredicatel类
//利用正则表达式验证
NSPredicatel类:主要用来指定过滤器的条件,该对象可以准确的描述所需条件,对每个对象通过谓词进行筛选,判断是否与条件相匹配。谓词是指在计算机中表示计算真假值的函数。原理和用法都类似于SQL查询中的where,作用相当于数据库的过滤取。主要用于从集合中分拣出符合条件的对象,也可以用于字符串的正则匹配
1
2
3
4
5
6
|
-(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex = @ "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" ; NSPredicate *emailTest = [NSPredicate predicateWithFormat:@ "SELF MATCHES%@" ,emailRegex]; return [emailTest evaluateWithObject:email]; } |
2.匹配9-15个由字母/数字组成的字符串的正则表达式:
1
2
3
|
NSString * regex = @ "^[A-Za-z0-9]{9,15}$" ; NSPredicate *pred = [NSPredicate predicateWithFormat:@ "SELF MATCHES %@" , regex]; BOOL isMatch = [pred evaluateWithObject:txtfldPhoneNumber.text]; |
Cocoa用NSPredicate描述查询的方式,原理类似于在数据库中进行查询
用BETWEEN,IN,BEGINWITH,ENDWITH,CONTAINS,LIKE这些谓词来构造NSPredicate,必要的时候使用SELF直接对自己进行匹配
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
//基本的查询 NSPredicate *predicate; predicate = [NSPredicate predicateWithFormat: @ "name == 'Herbie'" ]; BOOL match = [predicate evaluateWithObject: car]; NSLog (@ "%s" , (match) ? "YES" : "NO" ); //在整个cars里面循环比较 predicate = [NSPredicate predicateWithFormat: @ "engine.horsepower > 150" ]; NSArray *cars = [garage cars]; for (Car *car in [garage cars]) { if ([predicate evaluateWithObject: car]) { NSLog (@ "%@" , car.name); } } //输出完整的信息 predicate = [NSPredicate predicateWithFormat: @ "engine.horsepower > 150" ]; NSArray *results; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , results); //含有变量的谓词 NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat:@ "name == $NAME" ]; NSDictionary *varDict; varDict = [NSDictionary dictionaryWithObjectsAndKeys: @ "Herbie" , @ "NAME" , nil]; predicate = [predicateTemplate predicateWithSubstitutionVariables: varDict]; NSLog(@ "SNORGLE: %@" , predicate); match = [predicate evaluateWithObject: car]; NSLog (@ "%s" , (match) ? "YES" : "NO" ); //注意不能使用$VARIABLE作为路径名,因为它值代表值 //谓词字符窜还支持c语言中一些常用的运算符 predicate = [NSPredicate predicateWithFormat: @ "(engine.horsepower > 50) AND (engine.horsepower < 200)" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "oop %@" , results); predicate = [NSPredicate predicateWithFormat: @ "name < 'Newton'" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , [results valueForKey: @ "name" ]); //强大的数组运算符 predicate = [NSPredicate predicateWithFormat: @ "engine.horsepower BETWEEN { 50, 200 }" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , results); NSArray *betweens = [NSArray arrayWithObjects: [NSNumber numberWithInt: 50], [NSNumber numberWithInt: 200], nil]; predicate = [NSPredicate predicateWithFormat: @ "engine.horsepower BETWEEN %@" , betweens]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , results); predicateTemplate = [NSPredicate predicateWithFormat: @ "engine.horsepower BETWEEN $POWERS" ]; varDict = [NSDictionary dictionaryWithObjectsAndKeys: betweens, @ "POWERS" , nil]; predicate = [predicateTemplate predicateWithSubstitutionVariables: varDict]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , results); //IN运算符 predicate = [NSPredicate predicateWithFormat: @ "name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , [results valueForKey: @ "name" ]); predicate = [NSPredicate predicateWithFormat: @ "SELF.name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , [results valueForKey: @ "name" ]); names = [cars valueForKey: @ "name" ]; predicate = [NSPredicate predicateWithFormat: @ "SELF IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }" ]; results = [names filteredArrayUsingPredicate: predicate]; //这里限制了SELF的范围 NSLog (@ "%@" , results); //BEGINSWITH,ENDSWITH,CONTAINS //附加符号,[c],[d],[cd],c表示不区分大小写,d表示不区分发音字符,cd表示什么都不区分 predicate = [NSPredicate predicateWithFormat: @ "name BEGINSWITH 'Bad'" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , results); predicate = [NSPredicate predicateWithFormat: @ "name BEGINSWITH 'HERB'" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , results); predicate = [NSPredicate predicateWithFormat: @ "name BEGINSWITH[cd] 'HERB'" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , results); //LIKE运算符(通配符) predicate = [NSPredicate predicateWithFormat: @ "name LIKE[cd] '*er*'" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , results); predicate = [NSPredicate predicateWithFormat: @ "name LIKE[cd] '???er*'" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , results); //基本的查询 NSPredicate *predicate; predicate = [NSPredicate predicateWithFormat: @ "name == 'Herbie'" ]; BOOL match = [predicate evaluateWithObject: car]; NSLog (@ "%s" , (match) ? "YES" : "NO" ); //在整个cars里面循环比较 predicate = [NSPredicate predicateWithFormat: @ "engine.horsepower > 150" ]; NSArray *cars = [garage cars]; for (Car *car in [garage cars]) { if ([predicate evaluateWithObject: car]) { NSLog (@ "%@" , car.name); } } //输出完整的信息 predicate = [NSPredicate predicateWithFormat: @ "engine.horsepower > 150" ]; NSArray *results; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , results); //含有变量的谓词 NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat:@ "name == $NAME" ]; NSDictionary *varDict; varDict = [NSDictionary dictionaryWithObjectsAndKeys: @ "Herbie" , @ "NAME" , nil]; predicate = [predicateTemplate predicateWithSubstitutionVariables: varDict]; NSLog(@ "SNORGLE: %@" , predicate); match = [predicate evaluateWithObject: car]; NSLog (@ "%s" , (match) ? "YES" : "NO" ); //注意不能使用$VARIABLE作为路径名,因为它值代表值 //谓词字符窜还支持c语言中一些常用的运算符 predicate = [NSPredicate predicateWithFormat: @ "(engine.horsepower > 50) AND (engine.horsepower < 200)" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "oop %@" , results); predicate = [NSPredicate predicateWithFormat: @ "name < 'Newton'" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , [results valueForKey: @ "name" ]); //强大的数组运算符 predicate = [NSPredicate predicateWithFormat: @ "engine.horsepower BETWEEN { 50, 200 }" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , results); NSArray *betweens = [NSArray arrayWithObjects: [NSNumber numberWithInt: 50], [NSNumber numberWithInt: 200], nil]; predicate = [NSPredicate predicateWithFormat: @ "engine.horsepower BETWEEN %@" , betweens]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , results); predicateTemplate = [NSPredicate predicateWithFormat: @ "engine.horsepower BETWEEN $POWERS" ]; varDict = [NSDictionary dictionaryWithObjectsAndKeys: betweens, @ "POWERS" , nil]; predicate = [predicateTemplate predicateWithSubstitutionVariables: varDict]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , results); //IN运算符 predicate = [NSPredicate predicateWithFormat: @ "name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , [results valueForKey: @ "name" ]); predicate = [NSPredicate predicateWithFormat: @ "SELF.name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , [results valueForKey: @ "name" ]); names = [cars valueForKey: @ "name" ]; predicate = [NSPredicate predicateWithFormat: @ "SELF IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }" ]; results = [names filteredArrayUsingPredicate: predicate]; //这里限制了SELF的范围 NSLog (@ "%@" , results); //BEGINSWITH,ENDSWITH,CONTAINS //附加符号,[c],[d],[cd],c表示不区分大小写,d表示不区分发音字符,cd表示什么都不区分 predicate = [NSPredicate predicateWithFormat: @ "name BEGINSWITH 'Bad'" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , results); predicate = [NSPredicate predicateWithFormat: @ "name BEGINSWITH 'HERB'" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , results); predicate = [NSPredicate predicateWithFormat: @ "name BEGINSWITH[cd] 'HERB'" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , results); //LIKE运算符(通配符) predicate = [NSPredicate predicateWithFormat: @ "name LIKE[cd] '*er*'" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , results); predicate = [NSPredicate predicateWithFormat: @ "name LIKE[cd] '???er*'" ]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@ "%@" , results); |
以上就是小编给大家分享的iOS中使用正则表达式NSRegularExpression 来验证textfiled输入的内容,希望大家喜欢。