什么是正則表達式
- 正則表達式就是一種規(guī)則,我們通過這種規(guī)則來進行字符串的檢索、判斷等工作。
正則表達式的使用步驟
- 1.創(chuàng)建一個正則表達式對象:定義規(guī)則
- 2.利用正則表達式對象來測試相應的字符串
1.利用正則表達式來做匹配功能---判斷字符串是否和某個特定的規(guī)則
//1.創(chuàng)建正則表達式
//Pattern:樣式、規(guī)則
NSString * pattenrn = @"[0-9]";//找出0---9之間的數(shù)字字符串
NSString * pattenrn1 = @"abc";//找abc
NSString * pattenrn2 = @"0123456789";//找0123456789
NSString * pattenrn3 = @"[a-z]";//找小寫字母
NSString * pattenrn4 = @"[a-zA-Z]";//找小寫字母和大寫字母
NSString * pattenrn5 = @"[a-zA-Z0-9]";//查找小寫字母,大寫字母,0--9
NSString * pattenrn6 = @"[0-9][0-9]";//找兩個連在一起的數(shù)字
NSString * pattenrn7 = @"\\d\\d"; //找兩個連在一起的數(shù)字, \d代表數(shù)字,\是轉義字符,所以使用\\d代表一個數(shù)字
NSString * pattenrn8 = @"\\d{3}";//三個數(shù)字連在一起
// @"\\d{3}q{2}"---三個數(shù)字跟兩個q連在一起
NSString * pattenrn9 = @"\\d{2,4}";//要求字符串中數(shù)字的個數(shù)是2---4
NSString * pattenrn10 = @"^\\d";//要求判斷字符串是不是以數(shù)字開頭
NSString * pattenrn11 = @"^\\d{3}";//字符串以三個數(shù)字開頭
NSString * pattenrn12 = @"\\d{3}$";//字符串以三個數(shù)字結尾
NSString * pattenrn13 = @"^\\d\\d$";//只是代表兩個數(shù)字;字符串以數(shù)字開頭,并且以數(shù)字結尾
NSString * pattenrn14 = @"^\\d[0-9a-zA-Z]*\\d$";//以數(shù)字開頭,以數(shù)字結尾,中間可以任意多個數(shù)字、大小寫字母
//@"^\\d.*\\d$"--以數(shù)字開頭以數(shù)字結尾,中間什么都可以
//@"^\\d.\\d$"--以數(shù)字開頭以數(shù)字結尾,中間只能放一個任意東西
NSRegularExpression * regex = [[NSRegularExpression alloc]initWithPattern: pattenrn14 options:0 error:nil];
NSString * num = @"2p287abc98sd3499s";
//2.測試字符串
NSArray * results = [regex matchesInString:num options:0 range:NSMakeRange(0, num.length)];
NSLog(@"%zd",results.count);//results.count的值大于0時就代表有符合正則表達式條件的字符串
注意
- [ ]:代表只會查找內(nèi)部的某一個字符即可,只要是[ ]里面任意一個存在即可
- \d代表數(shù)字,\是轉義字符,所以使用\\d代表一個數(shù)字
- ? : 代表查找0個或者一個
- + : 查找至少一個
- * : 查找0個或者多個
- . :匹配除換行符以外的任意字符
- \w:匹配字母或數(shù)字或下劃線或漢字
- \s :匹配任意的空白符
- ^ :匹配字符串的開始
- $:匹配字符串的結束
注意:JavaScript的正則表達式, JS中正則表達式前面和后面都必須有 \
2.截取字符串中符合某個特定規(guī)則的內(nèi)容
NSString * str = @"123tianxia456tianxiauuuuutianxia";
//要求取出每一個tianxia,并且得到每一個tianxia的范圍
NSString * pattern = @"tianxia";
NSRegularExpression * regex = [[NSRegularExpression alloc]initWithPattern:pattern options:0 error:nil];
NSArray * results = [regex matchesInString:str options:0 range:NSMakeRange(0, str.length)];
NSLog(@"%@",results);
//打印結果:
(
"<NSSimpleRegularExpressionCheckingResult: 0x7fef8963ef60>{3, 7}{<NSRegularExpression: 0x7fef8963d140> tianxia 0x0}",
"<NSSimpleRegularExpressionCheckingResult: 0x7fef8963edf0>{13, 7}{<NSRegularExpression: 0x7fef8963d140> tianxia 0x0}",
"<NSSimpleRegularExpressionCheckingResult: 0x7fef8963ec00>{25, 7}{<NSRegularExpression: 0x7fef8963d140> tianxia 0x0}"
)
//3.遍歷結果
//NSSimpleRegularExpressionCheckingResult這個類是私有的,我們只能使用它的父類
for (NSTextCheckingResult * result in results) {
NSLog(@"%@",NSStringFromRange(result.range));
}
//打印結果:
2016-05-11 22:19:42.330 簡單正則表達式[921:42989] {3, 7}
2016-05-11 22:19:42.330 簡單正則表達式[921:42989] {13, 7}
2016-05-11 22:19:42.330 簡單正則表達式[921:42989] {25, 7}
//要求找出所有的人名---默認字母就是人名
NSString * str1 = @"123tian333xia456tian33xiauu3uuutia33nxia";
NSString * pattern0 = @"[a-zA-Z]+";//@"[a-zA-Z]{1,}"
NSRegularExpression * regex1 = [[NSRegularExpression alloc]initWithPattern:pattern0 options:0 error:nil];
NSArray * results1 = [regex1 matchesInString:str1 options:0 range:NSMakeRange(0, str1.length)];
//3.遍歷結果
//NSSimpleRegularExpressionCheckingResult這個類是私有的,我們只能使用它的父類
for (NSTextCheckingResult * result in results1) {
NSLog(@"%@----%@",NSStringFromRange(result.range),[str1 substringWithRange:result.range]);
}
//打印結果:
2016-05-11 22:19:42.330 簡單正則表達式[921:42989] {3, 4}----tian
2016-05-11 22:19:42.331 簡單正則表達式[921:42989] {10, 3}----xia
2016-05-11 22:19:42.331 簡單正則表達式[921:42989] {16, 4}----tian
2016-05-11 22:19:42.331 簡單正則表達式[921:42989] {22, 5}----xiauu
2016-05-11 22:19:42.331 簡單正則表達式[921:42989] {28, 6}----uuutia
2016-05-11 22:19:42.331 簡單正則表達式[921:42989] {36, 4}----nxia
正則表達式在項目中的使用例子
// NSString+ZZYExtension.h
// 簡單正則表達式
//
// Created by admin on 16/5/5.
// Copyright ? 2016年 念男. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface NSString (ZZYExtension)
- (BOOL)isQQ;
- (BOOL)isPhoneNumber;
- (BOOL)isIpAddress;
@end
// NSString+ZZYExtension.m
// 簡單正則表達式
//
// Created by admin on 16/5/5.
// Copyright ? 2016年 念男. All rights reserved.
//
#import "NSString+ZZYExtension.h"
@implementation NSString (ZZYExtension)
//qq不能以0開頭,5---11位數(shù)字,全部是數(shù)字
- (BOOL)isQQ
{
// //1.創(chuàng)建正則表達式
//// NSString * pattern = @"^\\d{5,11}$";
// NSString * pattern = @"^[1-9]\\d{4,10}$";
//
// NSRegularExpression * regex = [[NSRegularExpression alloc]initWithPattern:pattern options:0 error:nil];
//
// //2.測試字符串
// NSArray * results = [regex matchesInString:self options:0 range:NSMakeRange(0, self.length)];
// return results.count > 0;
return [self match:@"^[1-9]\\d{4,10}$"];
}
- (BOOL)isPhoneNumber
{
//1.全部是數(shù)字
//2.11為
//3. 以13、15、18、17開頭
return [self match:@"^1[3578]\\d{9}$"];
//以1開頭,中間任意3、5、7、8、一位,后面0-9的9位數(shù)字
}
- (BOOL)isIpAddress
{
//1.1-3個數(shù)字.1-3個數(shù)字.1-3個數(shù)字.1-3個數(shù)字
return [self match:@"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$"];
}
- (BOOL)match:(NSString *)pattern
{
//1.創(chuàng)建正則表達式
// NSString * pattern = @"^\\d{5,11}$";
// NSString * pattern = @"^[1-9]\\d{4,10}$";
NSRegularExpression * regex = [[NSRegularExpression alloc]initWithPattern:pattern options:0 error:nil];
//2.測試字符串
NSArray * results = [regex matchesInString:self options:0 range:NSMakeRange(0, self.length)];
return results.count > 0;
}
@end