这几天研究正则表达式发现正则表达式真是个好东西,可以在支付的时候轻松匹配交易数额,入门内容以及匹配如下:
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *textTf;
@property (weak, nonatomic) IBOutlet UILabel *label;
@property (weak, nonatomic) IBOutlet UIButton *testBtn;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//1.正则表达式的作用 方便快捷的匹配到特定的字符串,简化代码量
//例子解析
/* ^.{6,18}$ 表达的意思是匹配任意长度在6到18位长度的字符串
其中^和$代表的是特殊符号,前者表示匹配字符串的开头,后者表示匹配字符串的结尾;
其中{n}表示匹配字符重复n次,{n,}匹配字符重复n次或者更多次,{n,m}匹配重复n到m之间的次数;
而.符号表示任一字符(除换行符之外);
*/
/*为了进行精确的匹配,比如说匹配到具体的数字或者字母可以用特殊的符号来表示,其中d表示任意的单个数字,w表示任意单个字母或者数字或者直接使用0-9的任意数字表示具体数字。而特殊符号?表示前一个字符为0或者1个。
所以形如^0\d{2}-?\d{8}$ 表示的意思是匹配首字符为0后续接两个数字,再后续有一个“-”符号或者没有,再后续匹配8个数字;
有一点要注意,上面展示的表达式解析时d这些特殊符号在我们的代码中多了一个\,这是因为本身是转义符号,为了保证表达式能正常匹配,我们要给d进行一次转义,所以就变成了\。基本上所有的符号字符都需要转义
*/
/*正则表达式的拆分可以分为两部分,一部分是值表达式,另外一部分是修饰表达式。所谓值表达就是说这个符号表示了某个值,就像"d"表示数字,"."表示任意非换行符字符。修饰表达用来修饰值达成某种条件,比如{2}表示前面一个值重复两次,"*"表示前一个值重复0次或者更多次。根据这种方法,那么^.*[A-Z]+.*[a-z]+.*$可以拆分成:^$、.*、[A-Z]+、[a-z]+。
注:*表示前一个值符号重复0到任意次数;+表示前一个值符号重复1到任意次数
[A-Z]表示任意一个大写字母
*/
//2.语法/字符说明表
//值表达
/*
. 匹配除换行符外的任意字符
w 匹配字母或者数字的字符
W 匹配任意不是字母或者数字的字符
s 匹配任意的空白符(空符、制表符、换行符)
S 匹配任意不是空白符的字符
d 匹配任意数字
D 匹配任意非数字的字符
匹配单词的结尾或者开头的字符
B 匹配任意不是单词结尾或开头的字符
[^x] 匹配任意非x的字符。如[^[a-z]]匹配非小写字母的任意字符
^ 匹配字符串的开头
$ 匹配字符串的结尾
*/
//修饰表达
/*
* 匹配重复任意次数
+ 匹配重复一次以上的次数
? 匹配一次或零次
{n} 匹配重复n次
{n,} 匹配重复n次或n次以上
{n,m} 匹配重复最少n次最多m次
*/
[self.testBtn addTarget:self action:@selector(testBtnClick:) forControlEvents:UIControlEventTouchUpInside];
}
- (void)testBtnClick:(UIButton*)btn{
NSLog(@"开始测试");
// NSString *regExp = @"^\d{5,8}"; //匹配5到8位数字
NSString *regExp = @"^\d{1,}\.\d[1-9]"; //匹配小于等于0.01的数字
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regExp];
if ([predicate evaluateWithObject:self.textTf.text]) {
self.label.text = @"匹配成功";
}else{
self.label.text = @"匹配失败";
}
}
