正則表達式筆記---簡單入門

什么是正則表達式

  • 正則表達式就是一種規(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


最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 注:本篇文章只為方便查看,特此保留,如有冒犯,敬請諒解?。?! 本文目標 30分鐘內(nèi)讓你明白正則表達式是什么,并對它...
    阿杰Alex閱讀 1,573評論 0 10
  • 正則表達式到底是什么東西?字符是計算機軟件處理文字時最基本的單位,可能是字母,數(shù)字,標點符號,空格,換行符,漢字等...
    獅子挽歌閱讀 2,300評論 0 9
  • 推薦幾個正則表達式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:...
    木易林1閱讀 11,871評論 9 151
  • 幾個正則表達式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:ht...
    沒技術的BUG開發(fā)攻城獅閱讀 4,689評論 0 23
  • 初衷:看了很多視頻、文章,最后卻通通忘記了,別人的知識依舊是別人的,自己卻什么都沒獲得。此系列文章旨在加深自己的印...
    DCbryant閱讀 4,273評論 0 20

友情鏈接更多精彩內(nèi)容