iOS之有趣的正则表达式(Objective-C)
2018-03-19 本文已影响0人
Raywf
2018.3.19
iOS 简单应用
创建一个NSString分类
// NSString+RFCategory.h
#import <Foundation/Foundation.h>
@interface NSString (RFCategory)
///正则匹配判定
- (BOOL)rf_IsMatchRegEx:(NSString *)regEx;
@end
// NSString+RFCategory.m
#import "NSString+RFCategory.h"
@implementation NSString (RFCategory)
- (BOOL)rf_IsMatchRegEx:(NSString *)regEx {
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regEx];
BOOL isMatch = [pred evaluateWithObject:self];
return isMatch;
}
@end
正则表达式
补充1
常用元字符
代码 说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
常用限定符
代码/语法 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
常用反义词
代码/语法 说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符
正则表达式
补充2
中文字符:[\u4e00-\u9fa5] //ps.OC的语法要求为:[\\u4e00-\\u9fa5]
双字节字符:[^\x00-\xff]
空白行:\s
Email地址:\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}
网址URL:^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+
手机(国内):0?(13|14|15|17|18|19)[0-9]{9}
电话号码(国内):[0-9-()()]{7,18}
负浮点数:-([1-9]\d*.\d*|0.\d*[1-9]\d*)
匹配整数:-?[1-9]\d*
正浮点数:[1-9]\d*.\d*|0.\d*[1-9]\d*
腾讯QQ:[1-9]([0-9]{5,11})
邮政编码:\d{6}
IP:(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)
身份证:\d{17}[\d|x]|\d{15}
格式日期:\d{4}(\-|\/|.)\d{1,2}\1\d{1,2}
正整数:[1-9]\d*
负整数:-[1-9]\d*
用户名:[A-Za-z0-9_\-\u4e00-\u9fa5]+
正则表达式
补充3
英文:[a-zA-Z'-]{1,100}
韩文:[\u3130-\u318f\uac00-\ud7a3]
日文:[\u0800-\u4e00]
中日韩:[\u3130-\u318f\uac00-\ud7a3\u2e80-\u9fff]
数字:[0-9]
任意字符:[\\s\\S]
其它补充参考.
[\uac00-\ud7a3]
基本包括所有的韩文
匹配中文汉字日文韩文等多国语言的正则表达式
[\u2e80-\u9fff]
包含了部分日文,故不可用来检测中文