关闭

自定义的正则表达式

1417人阅读 评论(0) 收藏 举报
分类:

//

//  main.m

//  正则表达式

//

//  Created by apple on 14/11/15.

//  Copyright (c) 2014 heima. All rights reserved.

//


#import <Foundation/Foundation.h>

#import "NSString+Extension.h"

#import "RegexKitLite.h"


int main(int argc,const char * argv[])

{

    @autoreleasepool {

        NSString *str =@"#呵呵呵#[偷笑] http://foo.com/blah_blah #解放军#//http://foo.com/blah_blah @Ring花椰菜:#范德萨发生的#舍不得打[test]就惯#急急急#着他吧[挖鼻屎]//@崔西狮:小拳头举起又放下了说点啥好呢…… //@toto97:@崔西狮蹦米咋不揍他#哈哈哈# http://foo.com/blah_blah";

//        NSString *str = @"#呵呵呵#返回加快速度会尽#解放军#快发货看电视#好几件#发货了速度了恢复良好";

        

        // 表情的规则

        NSString *emotionPattern =@"\\[[0-9a-zA-Z\\u4e00-\\u9fa5]+\\]";

        // @的规则

        NSString *atPattern =@"@[0-9a-zA-Z\\u4e00-\\u9fa5]+";

        // #话题#的规则

        NSString *topicPattern =@"#[0-9a-zA-Z\\u4e00-\\u9fa5]+#";

        // url链接的规则

        NSString *urlPattern =@"\\b(([\\w-]+://?|www[.])[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|/)))";

        NSString *pattern = [NSStringstringWithFormat:@"%@|%@|%@|%@", emotionPattern, atPattern, topicPattern, urlPattern];

//        NSArray *cmps = [str componentsMatchedByRegex:pattern];

        

        // 遍历所有的匹配结果

        [str enumerateStringsMatchedByRegex:patternusingBlock:^(NSInteger captureCount,NSString *const__unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {

            NSLog(@"%@ %@", *capturedStrings,NSStringFromRange(*capturedRanges));

        }];

        

        NSLog(@"-------------");

        

        // 以正则表达式为分隔符

        [str enumerateStringsSeparatedByRegex:patternusingBlock:^(NSInteger captureCount,NSString *const__unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {

            NSLog(@"%@ %@", *capturedStrings,NSStringFromRange(*capturedRanges));

        }];

    }

    return 0;

}


void test2()

{

    NSString *str =@"#呵呵呵#[偷笑] http://foo.com/blah_blah #解放军#//http://foo.com/blah_blah @Ring花椰菜:#范德萨发生的#舍不得打[test]就惯#急急急#着他吧[挖鼻屎]//@崔西狮:小拳头举起又放下了说点啥好呢…… //@toto97:@崔西狮蹦米咋不揍他#哈哈哈# http://foo.com/blah_blah";

    

    /**

     1.判断字符串是否符合某个特定规则

     * 判断某个字符串是否为QQ号码\电话号码\邮箱

     

     2.截取字符串中符合某个特定规则的内容

     * 截取@"#呵呵呵#[偷笑]5345http://foo.com/blah_blah #解放军# 58937985"的所有话题\表情\链接

     */

    

    // 1.创建正则表达式

    //        NSString *pattern = @"[a-zA-Z]{1,}";

    //        NSString *pattern = @"[a-zA-Z]+";

    

    // 表情的规则

    NSString *emotionPattern =@"\\[[0-9a-zA-Z\\u4e00-\\u9fa5]+\\]";

    

    // @的规则

    NSString *atPattern =@"@[0-9a-zA-Z\\u4e00-\\u9fa5]+";

    

    // #话题#的规则

    NSString *topicPattern =@"#[0-9a-zA-Z\\u4e00-\\u9fa5]+#";

    

    // url链接的规则

    NSString *urlPattern =@"\\b(([\\w-]+://?|www[.])[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|/)))";

    

    // | 匹配多个条件,相当于or\

    NSString *pattern = [NSStringstringWithFormat:@"%@|%@|%@|%@", emotionPattern, atPattern, topicPattern, urlPattern];

    

    NSRegularExpression *regex = [[NSRegularExpressionalloc] initWithPattern:patternoptions:0error:nil];

    // 2.测试字符串

    NSArray *results = [regex matchesInString:str options:0range:NSMakeRange(0, str.length)];

    

    // 3.遍历结果

    for (NSTextCheckingResult *resultin results) {

        NSLog(@"%@ %@",NSStringFromRange(result.range), [strsubstringWithRange:result.range]);

    }

}


/**

 *  正则表达式的基本使用

 */

void test1()

{

    

    NSString *username = @"6gjkhdjkhgkjh7";

    //        NSString *pattern = @"^\\d{3}";

    //        NSString *pattern = @"\\d{3}$";

    // 1.创建正则表达式

    NSString *pattern = @"^\\d.*\\d$";

    NSRegularExpression *regex = [[NSRegularExpressionalloc] initWithPattern:patternoptions:0error:nil];

    

    // 2.测试字符串

    NSArray *results = [regex matchesInString:username options:0range:NSMakeRange(0, username.length)];

    

    NSLog(@"%zd", results.count);

    

    /**

     使用正则表达式的步骤:

     1.创建一个正则表达式对象:定义规则

     

     2.利用正则表达式对象来测试 相应的字符串

     */

    

    // Pattern : 样式\规则

    //        NSString *pattern = @"ab7";

    // [] : 找到内部的某一个字符即可

    //        NSString *pattern = @"[0123456789]";

    //        NSString *pattern = @"[0-9]";

    //        NSString *pattern = @"[a-zA-Z0-9]";

    //        NSString *pattern = @"[0-9][0-9]";

    //        NSString *pattern = @"\\d\\d\\d";

    //        NSString *pattern = @"\\d{2,4}";

    

    // ? + *

    // ? : 0个或者1

    // + : 至少1

    // * : 0个或者多个

}


/**

 *  普通的做法:检测全数字

 */

void test()

{

    NSString *username = @"5347858h7";

    

    BOOL flag = YES;

    for (int i =0; i<username.length; i++) {

        unichar c = [username characterAtIndex:i];

        if (!(c >= '0' && c <= '9')) {

            flag = NO;

            break;

        }

    }

    

    if (flag) {

        NSLog(@"用户名正确");

    } else {

        NSLog(@"里面包含了非数字");

    }

}















































0
0
查看评论

正则表达式匹配/可以自定义正则表达式

  • 2010-04-20 11:15
  • 509KB
  • 下载

正则表达式概念详解

正则表达式就是使用一些抽象出来用来代表某类字符的特定字符组成的字符串。 正则表达式是用来在大量字符中匹配(寻找)符合自身字符规则的字符串。 正则表达式是一种规则(人为定义的用某些字符表示一类字符的规则)。 下面主要说明定义正则表达式规则所抽象出来的所有字符所包含的意义。 ...
  • ShortChin
  • ShortChin
  • 2016-05-30 15:28
  • 2609

python 学习笔记(5)用户自定义类正则表达式

声明:本文系本人学习python3总结,如有侵权等,请及时告知;                    &#...
  • kevinx_xu
  • kevinx_xu
  • 2013-05-08 11:10
  • 1016

logstash 自定义正则

aav77%% (?([a-zA-Z0-9])) { "str": [ [ "a" ] ] } + 匹配前导字符一次或多次 aav77%% (?([a-zA-Z0-9]+)) { "str&quo...
  • zhaoyangjian724
  • zhaoyangjian724
  • 2017-02-12 12:16
  • 773

Android EditView自定义正则表达式

自定义问题描述     有两个要求:     1.EditText获取到焦点时,弹出数字键盘;     2. 只能输入数字或字母; 自定义解决方案 <EditText an...
  • u012246458
  • u012246458
  • 2017-06-19 13:02
  • 603

利用正则表达式对电话号码、邮箱的验证

正则表达式是一个神奇的东西,很多人都喜欢使用正则表达式来进行表单的验证,例如电话号码、邮箱、邮编、非空等的验证,当然,一些简单的验证,你可以使用别人封装好的技术来验证,但是需求中又复杂的验证的话,还是正则表达式会更好用,如果你懂得正则表达式的话,这些验证写起来确实很简单呢,如果不是很懂的话,我这里可...
  • gudayu
  • gudayu
  • 2016-10-21 15:42
  • 2007

常用的正则表达式公式

以下是转载文章: 常用正则表达式大全!(例如:匹配中文、匹配html)  匹配中文字符的正则表达式: [u4e00-u9fa5]      评注:匹配中文还真是个头疼的事,有了这个表达式就好办了    匹配双字节字符(包括汉字在内):...
  • dipang00
  • dipang00
  • 2016-10-17 15:01
  • 836

使用 正则表达式 解析四则运算式

测试如:iif(rui(5.27778 * (2+0.7) / 1.257 + sqrt(9+6) + pow(2,4)) > rui(pow(sqrt(6+(7)),sqrt((5+3)))), sqrt(power(2+2,2)),sqrt(25)) 注:rui无条件进1;解析步...
  • cqdyh
  • cqdyh
  • 2006-10-28 09:54
  • 1763

iOS Objective-C 正则表达式指南

1. 语法 2. 模式 2.1 Search + (NSString *)getDomainOfEmailAddress:(NSString *)email { NSString *re = @"(?<=@)((?:[A-Za-z0-9]+(?:[\\-|\...
  • waterforest_pang
  • waterforest_pang
  • 2014-09-09 10:40
  • 14457

自定义php模板引擎

模板引擎的思想是来源于MVC(Model View Controller)模型,即模型层、视图层、控制器层。     在Web端,模型层为数据库的操作;视图层就是模板,也就是Web前端;Controller就是PHP对数据和请求的各种操作。模板引擎就是为了将视图层和其他层分离开...
  • czrzchao
  • czrzchao
  • 2016-08-03 22:40
  • 2277
    个人资料
    • 访问:113751次
    • 积分:3130
    • 等级:
    • 排名:第13080名
    • 原创:209篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条