以下是对正则表达式学习的一些整理。

头部尾部

^ 表示开始 后接字符串 ^one

$ 表示结束 前接字符串 dog$

“banana” 必须包含此字符串

限制个数

* 0个或更多个 ab* (a,ab,abbb…)

+ 1个或更多个 ab+ (ab, abbb…)

? 0个或1个 ab? (a, ab)

{4} 4个 ab{4} (abbbb)

{1,} 至少1个 ab{1,} (ab, abbb…)

{3,4} 3个到4个 ab{3,4} (abbb, abbbb)

注:必须有下限,ab{,5}是错误的

| 表示或 (a|b)e (ae, be)

字符范围

[a-z] 所有小写字母

[0-9] 数字

. 任意字符

连续字符

\4 连续有4个字符 (.)\4 连续4个相同字符

{1,2} 连续1个或者2个字符 10{1,2} (10,100)

{3,} 连续3个以上字符 0{3,} (000,0000)

不希望出现的字符

^ 后接不希望出现的字符 @[^a-zA-Z]@ 两个@之前不能有字母

其他

\d 匹配一个数字字符 等价于[0-9]

\D 匹配一个非数字字符 等价于[^0-9]

\w 匹配包括下划线的任何单词字符 等价于[A-Za-z0-9]

\W 匹配任何非单词字符 等价于[^A-Za-z0-9]

转义字符处理

碰到转义字符 多加一个 \

正则表达式与NSPredicate连用

1
2
3
4
5
- (BOOL)validateNumber:(NSString *)textString {
NSString* number=@"^[0-9]+$";
NSPredicate *numberPre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",number];
return[numberPre evaluateWithObject:textString];
}

NSString方法

1
2
3
4
5
NSString *searchText = @"rangeOfString";
NSRange range = [searchText rangeOfString:@"^[0-9]+$"options:NSRegularExpressionSearch];
if(range.location != NSNotFound) {
NSLog(@"range :%@", [searchText substringWithRange:range]);
}

正则表达式类(NSRegularExpression)

1
2
3
4
5
6
7
NSString *searchText = @"you want to match";
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^[0-9]+$"options:NSRegularExpressionCaseInsensitive error:&error];
NSTextCheckingResult *result = [regex firstMatchInString:searchText options:0 range:NSMakeRange(0, [searchText length])];
if(result) {
NSLog(@"%@", [searchText substringWithRange:result.range]);
}