正則表達式規則和使用方法和步驟
正則作用
1,判斷某個字符串是否符合特定的規則
2,截取字符串中某些符合特定規則的內容
使用步驟
1, 利用正則表達式對象,定義規則
2,利用正則表達式測試相應字符串
比較常用的規則符號代表的意思
- [] :找到內部某個字符即可
- 12345 : 找到字符串連在一起的123456
- [a-z]:找字符串中所有的小寫字母
- [A-Z]:所有的大寫字母
- [a-zA-Z] :大小所有的字母
- [a-zA-Z]+ :可以找出字符串中,字符連在一起的字符串。比如
jack12marry23bobal --->可以匹配找出jack , marry ,bobal,和他的范圍 - [\u4e00-\u9fa5] :中文正則范圍
- [0-9][0-9] :代表找2個連在一起的數字
- \d\d\d: 代表找3個數字連在一起
- \d{3} :代表3個數字連在一起
- \d{3}aa :代表3個數字跟2個a連在一起
- \d{2,4} : 代表長度 2~ 4
- {9}:代表長度 9 位
- \d? : 找0個或者一個數字
- ? : 0個或者1個
- + : 至少一個
- * : 0個或者多個
- ^ :匹配字符串的開始,比如相匹配字符串開始是數字 : ^\d
^\d{3} -->必須以3個數字開頭 - $ :匹配字符串的結束 。\d{3}$ 以3個數字結束的規則
- ^\d.*\d$ : 數字開始,數字結束,中間放任何東西
- ^\d[0-9a-zA-Z]*\d$ :數字開始,數字結束,中間放大小寫,和數字任何個
- ^\d[0-9a-zA-Z]\d$ :數字開始,數字結束,中間放大小寫和數字,一個,少了一個*,所以只代表一個
- ^[1-9]{5,11}\d$ :QQ正則
例如
/** 正則表達式,基本用法,檢測純數字 */
-(void)detectionNum
{
/*
1,定義規則
2,使用規則
*/
NSString *test = @"424njkbkj8909890";
// 1 ,創建正則表達式
NSString *pattern = @"[0-9]"; //規則 ,檢測這個字符串有多少個數字。和他們在字符串中的位置
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil]; //創建正則對象
// 2,測試字符串
NSArray *results = [regex matchesInString:test options:0 range:NSMakeRange(0, test.length)];
NSLog(@"%@ \n %lu",results ,(unsigned long)results.count);
}
對應數字的字符串位置(
"<NSSimpleRegularExpressionCheckingResult: 0x15d61ff10>{0, 1}{<NSRegularExpression: 0x15d603a10> [0-9] 0x0}",
"<NSSimpleRegularExpressionCheckingResult: 0x15d691ab0>{1, 1}{<NSRegularExpression: 0x15d603a10> [0-9] 0x0}",
"<NSSimpleRegularExpressionCheckingResult: 0x15d611e00>{2, 1}{<NSRegularExpression: 0x15d603a10> [0-9] 0x0}",
"<NSSimpleRegularExpressionCheckingResult: 0x15d696640>{9, 1}{<NSRegularExpression: 0x15d603a10> [0-9] 0x0}",
"<NSSimpleRegularExpressionCheckingResult: 0x15d74dfb0>{10, 1}{<NSRegularExpression: 0x15d603a10> [0-9] 0x0}",
"<NSSimpleRegularExpressionCheckingResult: 0x15d7116e0>{11, 1}{<NSRegularExpression: 0x15d603a10> [0-9] 0x0}",
"<NSSimpleRegularExpressionCheckingResult: 0x15d712c10>{12, 1}{<NSRegularExpression: 0x15d603a10> [0-9] 0x0}",
"<NSSimpleRegularExpressionCheckingResult: 0x15d712e50>{13, 1}{<NSRegularExpression: 0x15d603a10> [0-9] 0x0}",
"<NSSimpleRegularExpressionCheckingResult: 0x15d712ec0>{14, 1}{<NSRegularExpression: 0x15d603a10> [0-9] 0x0}",
"<NSSimpleRegularExpressionCheckingResult: 0x15d715b50>{15, 1}{<NSRegularExpression: 0x15d603a10> [0-9] 0x0}"
)
有多少個數字10
尋找字符串特殊規則字符串的范圍
/** 尋找字符串中特定規則的字符串 */
-(void)findPatternRangeMake
{
NSString *test = @"ffwfsfdsfgoodfsfsfdgoodfsfsdfnknkgoodfsfs";
// 1 ,創建正則表達式
NSString *pattern = @"good";
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil]; //創建正則對象
// 2,測試字符串
NSArray *results = [regex matchesInString:test options:0 range:NSMakeRange(0, test.length)];
//3,便利結果
for (NSTextCheckingResult *result in results) {
NSLog(@"%@",NSStringFromRange(result.range)) ;//打印所有找到good的范圍
}
NSLog(@"對應數字的字符串位置%@ \n 有多少個數字%lu",results ,(unsigned long)results.count);
}
subTitle = 正則表達式基礎學習 subTitle1 = JGGDemo5
2018-03-03 15:22:21.291 JGGDemo[8839:3001501] range = {9, 4} ,sting = good
2018-03-03 15:22:21.293 JGGDemo[8839:3001501] range = {19, 4} ,sting = good
2018-03-03 15:22:21.293 JGGDemo[8839:3001501] range = {33, 4} ,sting = good
2018-03-03 15:22:21.293 JGGDemo[8839:3001501] 對應數字的字符串位置(
"<NSSimpleRegularExpressionCheckingResult: 0x13f580610>{9, 4}{<NSRegularExpression: 0x13f503c10> good 0x0}",
"<NSSimpleRegularExpressionCheckingResult: 0x13f57fe20>{19, 4}{<NSRegularExpression: 0x13f503c10> good 0x0}",
"<NSSimpleRegularExpressionCheckingResult: 0x13f57fc70>{33, 4}{<NSRegularExpression: 0x13f503c10> good 0x0}"
)
有多少個數字3
常見的表情規則
/** ?? 表情規則 @ 的規則 #話題規則#*/
-(void)emtionsPattern
{
NSString *test = @"ffwfsfds[淚奔]fgood@小米:產品不錯,我喜歡。#小米產品#fsfsfdgoodfs[大笑]fsdfnknkgoodfsfs[哈哈]#媽媽再也不用擔心我的學習#";
// 1 ,創建正則表達式
// NSString *pattern = @"\\[[a-zA-Z\\u4e00-\\u9fa5]+\\]"; //表情規則
// NSString *pattern = @"@[0-9a-zA-Z\\u4e00-\\u9fa5]+"; //@規則
// NSString *pattern = @"#[0-9a-zA-Z\\u4e00-\\u9fa5]+#"; //#話題規則
NSString *patterns = @"\\[[a-zA-Z\\u4e00-\\u9fa5]+\\]|@[0-9a-zA-Z\\u4e00-\\u9fa5]+|#[0-9a-zA-Z\\u4e00-\\u9fa5]+#";
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:patterns options:0 error:nil]; //創建正則對象
// 2,測試字符串
NSArray *results = [regex matchesInString:test options:0 range:NSMakeRange(0, test.length)];
//3,便利結果
for (NSTextCheckingResult *result in results) {
NSLog(@"range = %@ ,sting = %@",NSStringFromRange(result.range) , [test substringWithRange:result.range]) ;//打印所有找到good的范圍
}
// NSLog(@"對應數字的字符串位置%@ \n 有多少個數字%lu",results ,(unsigned long)results.count);
}
subTitle = 正則表達式基礎學習 subTitle1 = JGGDemo5
2018-03-03 15:48:55.800 JGGDemo[8861:3006701] range = {8, 4} ,sting = [淚奔]
2018-03-03 15:48:55.803 JGGDemo[8861:3006701] range = {17, 3} ,sting = @小米
2018-03-03 15:48:55.803 JGGDemo[8861:3006701] range = {30, 6} ,sting = #小米產品#
2018-03-03 15:48:55.804 JGGDemo[8861:3006701] range = {48, 4} ,sting = [大笑]
2018-03-03 15:48:55.804 JGGDemo[8861:3006701] range = {68, 4} ,sting = [哈哈]
2018-03-03 15:48:55.804 JGGDemo[8861:3006701] range = {72, 14} ,sting = #媽媽再也不用擔心我的學習#
RegexKitLite的使用,注意他是mrc,和記載 動態庫,添加liccucore
-(void)regexkit
{
NSString *test = @"ffwfsfds[淚奔]fgood@小米:產品不錯,我喜歡。#小米產品#fsfsfdgoodfs[大笑]fsdfnknkgoodfsfs[哈哈]#媽媽再也不用擔心我的學習#";
NSString *patterns = @"\\[[a-zA-Z\\u4e00-\\u9fa5]+\\]|@[0-9a-zA-Z\\u4e00-\\u9fa5]+|#[0-9a-zA-Z\\u4e00-\\u9fa5]+#";
NSArray *results = [test componentsMatchedByRegex:patterns];
XCLog(@"results = %@" ,results) ;
}
//打印結果
results = (
"[\U6cea\U5954]",
"@\U5c0f\U7c73",
"#\U5c0f\U7c73\U4ea7\U54c1#",
"[\U5927\U7b11]",
"[\U54c8\U54c8]",
"#\U5988\U5988\U518d\U4e5f\U4e0d\U7528\U62c5\U5fc3\U6211\U7684\U5b66\U4e60#"
)
[16:06:29] -[JGGDemo5ViewController regexkit]_block_invoke [第40行] [淚奔] {8, 4}
[16:06:29] -[JGGDemo5ViewController regexkit]_block_invoke [第40行] @小米 {17, 3}
[16:06:29] -[JGGDemo5ViewController regexkit]_block_invoke [第40行] #小米產品# {30, 6}
[16:06:29] -[JGGDemo5ViewController regexkit]_block_invoke [第40行] [大笑] {48, 4}
[16:06:29] -[JGGDemo5ViewController regexkit]_block_invoke [第40行] [哈哈] {68, 4}
[16:06:29] -[JGGDemo5ViewController regexkit]_block_invoke [第40行] #媽媽再也不用擔心我的學習# {72, 14}