正則表達式Regular Expression

1,正則表達式的基本使用:

//1.1,創(chuàng)建一個正則表達式對象:定義規(guī)則
NSString *pattern = @"[0-9]";
NSRegularExpression *regularExp = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];

//1.2,利用對象進行判斷(test是你要從中查找的字符串)
NSArray *results = [regularExp matchesInString:test options:0 range:NSMakeRange(0, test.length)];

//2,輸出結果,注意遍歷的時候里面的子類是:NSTextCheckingResultfor 
for (NSTextCheckingResult *result in results) { 
    NSLog(@"%@,%@",NSStringFromRange(result.range),[test substringWithRange:result.range]);
}

2,正則表達式的規(guī)則:

  • 2.1,查找指定的對象(比如“張”字):
    NSString *pattern = @"張";//直接寫在里面

  • 2.2,查找指定對象中的任何一個:

  • 注意??:數(shù)字可以簡化用\d表示,oc中需要轉(zhuǎn)義,即用\\d表示

  • 任意一個數(shù)字:
    NSString *pattern = @"[1234567890]";
    //@"[1234567890]"也可以簡化成@"[0-9]",中括號代表查找內(nèi)部內(nèi)容的任何一個
    NSString *pattern = @"[0-9]";
    NSString *pattern = @"\\d";

  • 比如說任何一個小寫字母:
    NSString *pattern = @"[a-z]";

  • 比如說任何一個字母:
    NSString *pattern = @"[a-zA-Z]";

  • 比如說任何一個字母或者數(shù)字:
    NSString *pattern = @"[a-zA-Z0-9]";

  • 比如說“張三毛”三個字中的其中任何一個:
    NSString *pattern = @"[張三毛]";//中括號代表查找內(nèi)部內(nèi)容的任何一個

  • 2.3,查找指定對象中同類型連續(xù)的:

  • 比如說有多少個兩個數(shù)字一起的:
    NSString *pattern = @"[0-9][0-9]";//NSString *test = @"1234567890",test中輸出結果是5,因為有5對
    NSString *pattern = @"\d\d";//這種方式還可以用大括號簡化,如兩個連在一起的數(shù)字,用@“\d{2}”表示

  • 比如說有多少個五個個數(shù)字一起的:
    NSString *pattern = @"\\d{5}";

  • 比如說三個數(shù)字兩個字母a連在一起:
    NSString *pattern = @"\\d{3}a{2}";

  • 比如說2-4個數(shù)字連在一起的:
    NSString *pattern = @"\\d{2-4}";//1234輸出結果為1,12345輸出結果為1,123456輸出結果為2!

  • 2.4,特殊字符在正則中的作用

  • ? :0個或者1個// @"k58k789"結果為8,@"k58"結果為4,@"k5"結果為3

  • * : 0個或者多個// @"k58k789"結果為5,@"k58"結果為3,@"k5"結果為3

  • + : 至少一個(一般用+比較多)// @"k58k789"結果為2,@"k58"結果為1,@"k5"結果為1

  • ^ : 匹配字符串的開始
    NSString *pattern = @"^\\d"http://字符串必須以數(shù)字開頭,@"1k5dd324"結果為1
    NSString *pattern = @"^\\d{3}"http://字符串必須以3個數(shù)字開頭,@"1k5dd324"結果為0,@"231k5dd324"結果為1

  • $ : 匹配字符串的結束
    NSString *pattern = @"\\d$"http://字符串必須以數(shù)字結束,@"1k5dd324"結果為1
    NSString *pattern = @"\\d{3}$"http://字符串必須以3個數(shù)字結束,@"1k5dd324"結果為1

  • 2.5,查找以數(shù)字開頭并以數(shù)字結尾:

  • NSString *pattern = @"^\\d[0-9a-zA-Z]*\\d$";//*星號不可以省略,這行還可以簡化如下

  • NSString *pattern = @"^\\d.*\\d$";//.代表任何字符, .*代表任意零個或者多個字符

3,正則表達式幾種常見應用場景:

  • 3.1,正則判斷是否是QQ號碼:
  • 5-11位數(shù)字
  • 非0開頭
NSString *pattern = @"^[1-9]\\d{4,10}$";
  • 3.2,正則判斷是否是手機號碼:
  • 11位數(shù)字
  • 13/15/17/183開頭
NSString *pattern = @"^1[3578]\\d{9}$";
  • 3.3, 正則判斷是否是IP地址:
    1-3個數(shù)字-1-3個數(shù)字-1-3個數(shù)字-1-3個數(shù)字
NSString *pattern = @“((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))”;
  • 3.4, 正則匹配中文:
NSString *pattern = @"[\\u4e00-\\u9fa5]";
  • 3.5, 正則匹配url:
NSString *pattern = @"(http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&:/~\\+#]*[\\w\\-\\@?^=%&/~\\+#])?";

4,取出正則表達式中匹配的內(nèi)容并解析:

NSString *test = @"jack13412rosee3323fdf543589dkkd";

//1,正則表達式的使用:
//1.1,創(chuàng)建一個正則表達式對象:定義規(guī)則
NSString *pattern = @"[a-zA-Z]+";
NSRegularExpression *regularExp = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];
//1.2,利用對象進行判斷
NSArray *results = [regularExp matchesInString:test options:0 range:NSMakeRange(0, test.length)];

//2,輸出結果,注意遍歷的時候里面的子類是:NSTextCheckingResult
for (NSTextCheckingResult *result in results) {
    NSLog(@"%@,%@",NSStringFromRange(result.range),[test substringWithRange:result.range]);
}

5,匹配#,@和[]內(nèi)容

//即將到來的秀恩愛高峰期[拜拜]@搞笑補習班即將到來的秀恩愛高峰期[拜拜]
NSString *test = @"即[abvc]將到來的秀恩愛高峰期[拜拜]@搞笑補習班:即將到http://c.biancheng.net/cpp/html/1435.html 來的秀恩愛高峰期[拜拜]#hahahaha# http://c.biancheng.net/cpp/html/1435.html";

  • 匹配[]內(nèi)容
//1,正則表達式的使用:
//1.1,創(chuàng)建一個正則表達式對象:定義規(guī)則
NSString *pattern = @"\\[[a-zA-Z\\u4e00-\\u9fa5]+\\]";
NSRegularExpression *regularExp = [[NSRegularExpression alloc] initWithPattern:pattern options:0 error:nil];

//1.2,利用對象進行判斷
NSArray *results = [regularExp matchesInString:test options:0 range:NSMakeRange(0, test.length)];

for (NSTextCheckingResult *result in results) {
    NSLog(@"--000%@,%@",NSStringFromRange(result.range),[test substringWithRange:result.range]);
}
  • 匹配#內(nèi)容
//1,正則表達式的使用:
//1.1,創(chuàng)建一個正則表達式對象:定義規(guī)則
NSString *pattern01 = @"\\#[a-zA-Z\\u4e00-\\u9fa5]+\\#";
NSRegularExpression *regularExp01 = [[NSRegularExpression alloc] initWithPattern:pattern01 options:0 error:nil];

//1.2,利用對象進行判斷
NSArray *results01 = [regularExp01 matchesInString:test options:0 range:NSMakeRange(0, test.length)];

for (NSTextCheckingResult *result in results01) {
    NSLog(@"--001%@,%@",NSStringFromRange(result.range),[test substringWithRange:result.range]);
}
  • 匹配@內(nèi)容
//1,正則表達式的使用:
//1.1,創(chuàng)建一個正則表達式對象:定義規(guī)則
NSString *pattern02 = @"\\@[0-9A-Za-z\\u4e00-\\u9fa5]+";
NSRegularExpression *regularExp02 = [[NSRegularExpression alloc] initWithPattern:pattern02 options:0 error:nil];

//1.2,利用對象進行判斷
NSArray *results02 = [regularExp02 matchesInString:test options:0 range:NSMakeRange(0, test.length)];

for (NSTextCheckingResult *result in results02) {
    NSLog(@"--002%@,%@",NSStringFromRange(result.range),[test substringWithRange:result.range]);
}
  • 匹配url內(nèi)容
//1,正則表達式的使用:
//1.1,創(chuàng)建一個正則表達式對象:定義規(guī)則
NSString *pattern03 = @"(http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&:/~\\+#]*[\\w\\-\\@?^=%&/~\\+#])?";
NSRegularExpression *regularExp03 = [[NSRegularExpression alloc] initWithPattern:pattern03 options:0 error:nil];

//1.2,利用對象進行判斷
NSArray *results03 = [regularExp03 matchesInString:test options:0 range:NSMakeRange(0, test.length)];

for (NSTextCheckingResult *result in results03) {
    NSLog(@"--002%@,%@",NSStringFromRange(result.range),[test substringWithRange:result.range]);
}

6,第三方框架RegexKitLite:

  • 6.1,使用??:
  • 1,改為MRC模式:-fno-objc-arc
Snip20170111_19.png
  • 2,需要添加動態(tài)庫: libicucore.dylib

  • Snip20170111_20.png
  • 6.2,使用方法:

  • 6.2.1,正向查找普通方法:

  • 查找特殊字符

NSString *str = @"即[][abvc]將到來的#秀恩愛#高峰期[拜拜]@搞笑補習班:即將到http://c.biancheng.net/cpp/html/1435.html 來的秀恩愛高峰期[拜拜]#hahahaha# http://c.biancheng.net/cpp/html/1435.html";
//找出表情內(nèi)容,如[拜拜]
NSString *emoPattern = @"\\[[a-zA-Z\\u4e00-\\u9fa5]+\\]";
NSArray *enoResults = [str componentsMatchedByRegex:emoPattern];
NSLog(@"表情內(nèi)容是---%@",enoResults);
//找出@內(nèi)容,如@搞笑補習班
NSString *atPattern = @"\\@[a-zA-Z\\u4e00-\\u9fa5]+";
NSArray *atResults = [str componentsMatchedByRegex:atPattern];
NSLog(@"@內(nèi)容是---%@",atResults);
//找出@話題內(nèi)容,如#秀恩愛#
NSString *topicPattern = @"\\#[a-zA-Z\\u4e00-\\u9fa5]+\\#";
NSArray *topicArray = [str componentsMatchedByRegex:topicPattern];
NSLog(@"熱門話題的內(nèi)容是---%@",topicArray);
  • 6.2.2,正向查找高級方法:
    • 查找特殊字符高級
NSString *str = @"即[][abvc]將到來的#秀恩愛#高峰期[拜拜]@搞笑補習班:即將到http://c.biancheng.net/cpp/html/1435.html 來的秀恩愛高峰期[拜拜dd]#hahahaha# http://c.biancheng.net/cpp/html/1435.html";
//找出表情內(nèi)容,如[拜拜]
NSString *emoPattern = @"\\[[a-zA-Z\\u4e00-\\u9fa5]+\\]";
//找出@內(nèi)容,如@搞笑補習班
NSString *atPattern = @"\\@[a-zA-Z\\u4e00-\\u9fa5]+";
//找出@話題內(nèi)容,如#秀恩愛#
NSString *topicPattern = @"\\#[a-zA-Z\\u4e00-\\u9fa5]+\\#";
//這里直接把三個查找的對象合并一下一下子全部輸出了就不在一一輸出了
NSString *pattern = [NSString stringWithFormat:@"%@|%@|%@",emoPattern, atPattern,topicPattern];
[str enumerateStringsMatchedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
    NSLog(@"range:%@, str:%@",NSStringFromRange(*capturedRanges), *capturedStrings);
}];
  • 6.2.2,反向查找方法:
    • 跟正向查找相反,查找特殊字符以外的所有其他字符
NSString *str = @"即[][abvc]將到來的#秀恩愛#高峰期[拜拜]@搞笑補習班:即將到http://c.biancheng.net/cpp/html/1435.html 來的秀恩愛高峰期[拜拜dd]#hahahaha# http://c.biancheng.net/cpp/html/1435.html";
//找出表情內(nèi)容,如[拜拜]
NSString *emoPattern = @"\\[[a-zA-Z\\u4e00-\\u9fa5]+\\]";
//找出@內(nèi)容,如@搞笑補習班
NSString *atPattern = @"\\@[a-zA-Z\\u4e00-\\u9fa5]+";
//找出@話題內(nèi)容,如#秀恩愛#
NSString *topicPattern = @"\\#[a-zA-Z\\u4e00-\\u9fa5]+\\#";
//這里直接把三個查找的對象合并一下一下子全部輸出了就不在一一輸出了,只有這里的方法和正向查找不同,注意分辨
NSString *pattern = [NSString stringWithFormat:@"%@|%@|%@",emoPattern, atPattern,topicPattern];
[str enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {
    NSLog(@"range:%@, str:%@",NSStringFromRange(*capturedRanges), *capturedStrings);
}];
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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