以前经常要用到正则表达式,比如判断手机号码,邮箱格式等等,只知道在网上copy代码,不知其所以然,所以学习了一下正则表达式,今天来讲讲。。。
1~什么是正则表达式
正则表达式又称正规表示法,是对字符串操作的一种逻辑公式。正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分。它可以迅速的用机简单的方式找到字符串的复杂控制。
2~正则表达式的语法
看一个过滤纯数字的demo:
- (BOOL) validataNumber:(NSString *)string{
NSString * number=@"^[0-9]+$";
NSPredicate * numberPre =[NSPredicate predicateWithFormat:@" SELF MATCHES %@ ",number];
return [numberPre evaluateWithObject:string];
}
其中一个语句就是正则表达式:@"^[0-9]+$"
它代表了字符串中只能包含>=1个0-9的数字,语法是不是有一些怪异?哈哈
下面我们来介绍正则表达式的语法(iOS中对转义字符的处理有一些不同,语法基本相同)
语法:
特殊字符 '^' 和 '$' 他们的作用是分别指出一个字符串的开始和结束
“^one”:表示所有以"one" 开始的字符串 (比如: "one cat" ,"one something" eg);
类似于- (BOOL) hasPrefix:(NSString *)aString; 前缀匹配
"two$":表示所有以"two" 结尾的字符串 (比如:" something two" eg);
类似于- (BOOL) hasSuffix:(NSString *)aString; 后缀匹配
"^person$":`表示开始和结尾都是 "person"的字符串,这个是唯一的~;
"person":表示任何包含"person" 的字符串。
类似于- (BOOL) containString:(NSString *)aString; 搜索子串用的。
"*","+","?" 这三个符号,表示一个或者N个字符重复出现的次数。他们分别表示“没有或者更多”,“一次或者更多”,“没有或者一次”。
比如:
1、"ab*"表示这个字符串有一个a后面跟着零个或者多个b("a" "ab" "abb" "abbb" eg)
2、"ab+"表示这个字符串有一个a后面跟着一个或者多个b ("ab" "abb" "abbb" eg)
3、"ab?"表示这个字符串有一个a后面跟着一个b或者没有b ("a" "ab" 两种)
4、"a?b+$"表示这个字符串的末尾有一个或者零个a跟着一个或者更多b("...b" "...ab" "...bb" "...abb" eg)
可以用大括号括起来 {} ,表示一个或者重复的具体范围。例如
1、"ab{4}" 表示这个字符串有一个a跟着4个b("abbbb")
2、"ab{3,4}"表示这个字符串有一个a跟着3个或者4个b("abbb" "abbbb")
3、"a{1,}"表示这个字符串有一个a跟着多个b,效果跟"ab+" 一样("ab" "abb" "abbb" eg)
所以上面的三个特殊符号可以分别用"{0,}" "{1,}" "{0,1}" 表示 (注:没有上限是不允许的,比如:"{,5}" 是错误的语法)
"|"表示”或“语法,比如""(a|bcd)ef"表示这个字符串是"aef"或者"bcdef"
方括号"[ ]" 表示在括号内的众多字符中,选择1-N个括号内的符号语法作为结果,例如:
1、"[ab]" 表示a或者b相当于 "a|b"
2、"[a-d]" 表示”a|b|c|d"或者"[abcd]",
3、"^[a-zA-Z]" 表示一个以字母开头的字符串
4、"[0-9]a" 表示一个字符串有一个数字加一个a
5、"[a-zA-Z0-9]$" 表示一个字符串以字母或者数字结尾
"." 匹配出"/r/n"之外的任何单个字符串,例如:
"^.{5}$" 表示这个字符串长度为5
"\num" 其中num是一个正整数。表示"\num"之前的字符出现相同的个数,例如:
1、"(.)\2"表示两个相同的字符
2、"10\{1,2\]" 表示数字1后面跟着1个或者2个0("10" "100")
3、”0{3,\}“表示只是3个0("000" "0000" eg)
在方括号中用 "^" 表示不希望出现的字符 其中 "^" 应该出现在方括号的第一位 比如“
"@[^a-zA-Z]@" 表示字符串在"@@"之间不希望出现字母
常用的一些还有:
"\d" 匹配一个数字字符,等价于[0-9]
"\D" 匹配一个非数字字符,等价于[^0-9]
"\w" 匹配包括下划线在内的任何单词字符,等价于"[a-zA-Z0-9_]"
"\W" 匹配任何非单词字符,等价与"[^a-zA-Z0-9_]"
在iOS中如果遇到转义字符的话,要多加一个"\" 例如:
全数字字符:@"^\\d+$"
OK !正则表达式就介绍到这里吧,下篇讲一些常用的正则表达式。