最近落實工作的事情后終於有時間可以寫博客了
今天帶來的是正則表達式的一般使用方法
我們平時在對字符串構成就行判斷的時候,一般利用其單個字符進行條件判斷
但如果判斷的條件稍微復雜一點,那對單個字符判斷就變得相當麻煩,因此這里就引入了正則表達式的概念
個人將正則表達式理解是:把多個字符串的集合為一個表達式寫出
OC中一般正則表達式的使用方法為2步
1.創建一個正則表達式對象
2.利用正則表達式來測試對應的字符串
例如
NSString *checkString = @"a34sd231"; //1.創建正則表達式,[0-9]:表示‘0’到‘9’的字符的集合 NSString *pattern = @"[0-9]"; //1.1將正則表達式設置為OC規則 NSRegularExpression *regular = [[NSRegularExpression alloc] initWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil]; //2.利用規則測試字符串獲取匹配結果 NSArray *results = [regular matchesInString:checkString options:0 range:NSMakeRange(0, checkString.length)]; NSLog(@"%ld",results.count);
獲取打印結果,從checkString上分析為數字的字符有5
所以可以得出一個結論,正則表達式的作用就是把多可字符串雜糅到一個表達式中
到這里就能大概明白正則表達式的意義了,接下來介紹一部分常用的正則表達式字符
/* []:找到內部的某一個字符 [a-zA-Z0-9] ===> 代表字符或數字 \\d ====>代表數字 {2}:代表有2個 {2,4}:代表有2到4個 // ? + * ^ $ . ?: 代表0或1個 +: 代表至少1個 *: 代表0個或多個 ^: 代表以...開頭 $: 代表以...結束 .: 代表除換行符以外的任意字符 */
//代表一個數字字符
NSString *pattern = @"\\d";
//代表2到5個連續的數字
NSString *pattern = @"\\d{2,5}";
//qq賬號的正則表達式
NSString *pattern = @"^[1-9]\\d{4,10}";
//電話號碼格式的正則表達式
NSString *pattern = @"^((13[0-9])|(15[3-5])|(18[07-9]))\\d{8}$"
//郵箱的正則表達式
NSString *pattern =@"^.*@..+\\.[a-zA-Z]{2,4}$"
這樣根據需要的匹配規則來設定正則表達式就可以判斷字符串是否為符合類型
若有一個長串字符串就要對其中部分進行表情、url、@(呼叫)或#話題# 的匹配判斷
則需要多個正則表達式來進行判斷
//需要被篩選的字符串 NSString *str = @"#今日要聞#[偷笑] http://asd.fdfs.2ee/aas/1e @sdf[test] #你確定#@rain李23: @張三[挖鼻屎]m123m"; //表情正則表達式 // \\u4e00-\\u9fa5 代表unicode字符 NSString *emopattern = @"\\[[a-zA-Z\\u4e00-\\u9fa5]+\\]"; //@正則表達式 NSString *atpattern = @"@[0-9a-zA-Z\\u4e00-\\u9fa5]+"; //#...#正則表達式 NSString *toppattern = @"#[0-9a-zA-Z\\u4e00-\\u9fa5]+#"; //url正則表達式 NSString *urlpattern = @"\\b(([\\w-]+://?|www[.])[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|/)))"; //設定總的正則表達式 NSString *pattern = [NSString stringWithFormat:@"%@|%@|%@|%@",emopattern,atpattern,toppattern,urlpattern]; //根據正則表達式設定OC規則 NSRegularExpression *regular = [[NSRegularExpression alloc] initWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil]; //獲取匹配結果 NSArray *results = [regular matchesInString:str options:0 range:NSMakeRange(0, str.length)]; //NSLog(@"%@",results); //遍歷結果 for (NSTextCheckingResult *result in results) { NSLog(@"%@ %@",NSStringFromRange(result.range),[str substringWithRange:result.range]); }
獲得結果
有了上面的演示就可以大致寫出系統方法使用的正則表達式了