版权声明:本文为博主原创文章,未经博主允许不得转载
以前经常要用到正则表达式,比如判断手机号码,邮箱格式等等,只知道在网上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个字符重复出现的次数。他们分别表示“没有或者更多”,“一次或者更多”,“没有或者一次”。
比如:
"ab*"
表示这个字符串有一个a后面跟着零个或者多个b(”a” “ab” “abb” “abbb” eg)"ab+"
表示这个字符串有一个a后面跟着一个或者多个b (”ab” “abb” “abbb” eg)"ab?"
表示这个字符串有一个a后面跟着一个b或者没有b (”a” “ab” 两种)"a?b+$"
表示这个字符串的末尾有一个或者零个a跟着一个或者更多b(”…b” “…ab” “…bb” “…abb” eg)
可以用大括号括起来 {}
,表示一个或者重复的具体范围。
例如:
"ab{4}"
表示这个字符串有一个a跟着4个b(”abbbb”)"ab{3,4}"
表示这个字符串有一个a跟着3个或者4个b(”abbb” “abbbb”)"a{1,}"
表示这个字符串有一个a跟着多个b,效果跟”ab+” 一样(”ab” “abb” “abbb” eg) 所以上面的三个特殊符号可以分别用"{0,}"
"{1,}"
"{0,1}"
表示 (注:没有上限是不允许的,比如:”{,5}” 是错误的语法)
"|"
表示”或”语法
- 比如
"(a|bcd)ef"
表示这个字符串是"aef"或者"bcdef"
方括号"[]"
表示在括号内的众多字符中,选择1-N个括号内的符号语法作为结果,例如:
"[ab]"
表示a或者b相当于"a|b"
"[a-d]"
表示"a|b|c|d"
或者"[abcd]"
,"^[a-zA-Z]"
表示一个以字母开头的字符串"[0-9]a"
表示一个字符串有一个数字加一个a"[a-zA-Z0-9]$"
表示一个字符串以字母或者数字结尾
"."
匹配出"/r/n"
之外的任何单个字符串,例如:
"^.{5}$"
表示这个字符串长度为5
"\num"
其中num是一个正整数。表示"\num"
之前的字符出现相同的个数,例如:
"(.)\2"
表示两个相同的字符"10\{1,2\]"
表示数字1后面跟着1个或者2个0(”10” “100”)"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 !正则表达式就介绍到这里吧,下篇讲一些常用的正则表达式。