写在前面
一直在用正则表达式,基本上都是匹配国内手机号码、邮箱等,近期需要匹配其他国家电话、邮箱,正好自己研究一下正则表达式。
正则表达式由原意字符和元字符构成(原意字符表达字符原有意思,元字符则表达规定的特殊意义)
示例:^[0-9]+$
上面就是一个完整的正则表达式,表示 一个只能由0到9(包含0和9)的数字 组成的至少一位的字符串,下面我们就来一起看一下正则表达式的基本用法。
语法
正则语法中最基础的表达式符号有以下四个
^ | $ | ** . ** | [ ] |
---|---|---|---|
指定字符串开头 | 指定字符串结尾 | 除 \r\n以外的 通配符 | 包含[]内的任意一个字符(至少1个) |
(\r :回车; \n:换行 )
^one
表示一个以“abc”开始的字符串("one people","one dog");
类似于-(BOOL) hasPrefix:(NSString *) astring;
-
dog$
:表示所以以”dog”结尾的字符串("a good dog","a bad dog");
类似于:- (BOOL)hasSuffix:(NSString *) aString;
-
^iPhone&
表示有且只有这一个不重复的字段,
相当于==
-
originalCharactor
单纯的原意字符表示包含该字符串,
相当于- (BOOL)containsString:(NSString *) aString,
- "." 也就是“点”,匹配任何单个字符(不包括回车换行)
1.a
1后面跟任意一个字符再跟一个a("1Qa","1@a","12a") -
[ab]
字符串中有一个a或b ("a","b") __ 注意区分 __^[ab]$
这是一个为"a"或"b"的字符串
[a-d]
:表示一个字符串包含小写的'a'到'd'中的一个;
^[a-zA-Z]
:表示一个以字母开头的字符串;
[0-9]a
:表示a前有一位的数字;
[a-zA-Z0-9]$
:表示一个字符串以一个字母或数字结束。
{ } | * | + | ? |
---|---|---|---|
{}前一字符出现次数由{}内数字决定 | *前一字符出现 0-N次 | +前一字符出现1-N次 | ?前一字符出现0-1次 |
( )
域段:可与其他字符结合使用,表示()内整个区域为一个整体
{}
设置"{}"前一字符重复的具体范围。例如:
“ab{4}”:字符串包含“一个a跟着4个b”(”abbbb”);
“ab{1,}”:字符串包含“一个a跟着至少1个b”(”ab”,”abb”,”abbb”,……);
“ab{2,5}”:表示一个字符串有一个a跟着2到5个b(”abb”,"abbb",”abbbb”,"abbbbb")。
-
ab*
:字符串包含“一个a后面跟着0-N个b”("a", "ab", "abbb",……); -
ab+
:字符串包含“一个a后面跟着1-N个b”( "ab", "abbb",……); -
ab?
:字符串包含“一个a后面跟着0-1个b”( ”a”, “ab”); -
1(abc)*
:字符串包含“1后跟着0个或若干个 abc ”("1","1abc","1abcabc",......);
可以看出,*
等价于{0,}
,+
等价于{1,}
,?
等价于{0,1}
注:{}
内可以没有上限,但是不能没有下限!例如“ab{,5}”是错误的写法
等价
由上文可以看出,在正则表达式中有些东西是等价的,等价是正则表达式中的重要概念,也是让初学者一脸懵逼的存在,但如果将等价恢复成原有语法记忆就比较简单了。
?,*,+,\d,\w 都是等价字符
“ | ”表示“或”操作,在[]
内第一位使用用'^'表示匹配除[]
内的其他字符
?等价于匹配长度{0,1}
*等价于匹配长度{0,}
+等价于匹配长度{1,}
\d等价于[0-9]
\D等价于[^0-9] :匹配一个非数字字符("aabbcd","@#$abcd")
\w等价于[A-Za-z_0-9]
\W等价于[^A-Za-z_0-9] :匹配 非字母数字 的字符
常用正则表达式
- 匹配国内手机号 :
正则表达式^1[3,4,5,7,8][0-9]{9}$
(13/14/15/17/18开头,11位)
iOS语法
-(BOOL) validatePhoneNum:(NSString *) phoneNum { NSString *phoneRegex = @"^1[3,4,5,7,8][0-9]{9}$"; NSPredicate *phonePre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex]; return [phonePre evaluateWithObject:phoneNum]; }
-
匹配邮箱:
正则表达式^[\w.%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$
iOS语法 参考手机号 - 匹配QQ号码:
^[1-9][0-9]{4,14}$
(5~15位,不能以0开头,只能是数字) - 匹配身份证:
(^[0-9]{15}$)|([0-9]{17}[0-9X]$)
(15位或18位身份证,18位身份证末位可能为X)
网友评论