正则表达式-04 实际应用

正则表达式在实际开发中,常常是为了获取文本中的一些信息,比如邮箱地址,手机号码,http网址之类的截取需求.
假设现在手机上有一条这样的信息,如果我想拨打电话给信息显示里面告知的手机号码,如果手机没有给我们将手机号码处理出来,那么用户则可能就需要先将号码截取复制,再粘贴入呼出界面拨号出去,这样显得客户体验不好,所以正则表达式就派上用场了.

博文代码(点击下载)

代码:

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString* message = @"你好,我的手机号码是13800138000,请登录网址http://www.housnk.com向我发一条询价邮件,我的邮箱是housnk@housnk.com";
        
        NSString* pattern = @"1[3578]\\d{9}";
        
        NSError* error = [[NSError alloc]init];
        
        NSRegularExpression* regularExpression = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
        
        NSArray* resultArray = [regularExpression matchesInString:message options:NSMatchingReportCompletion range:NSMakeRange(0, message.length)];
        
        if(resultArray.count){
            for (NSTextCheckingResult* result in resultArray) {
                NSLog(@"%@",[message substringWithRange:result.range]);
            }
        }else{
            NSLog(@"检索无结果");
        }
    }
    return 0;
}

运行结果:

RegularExpression04[3443:303] 13800138000

@"1[3578]\d{9}”这个检索规则的意思是,以1开头,接着第二个字符是”3”,”5”,”7”,”8”中的一个,然后就是9位数字,这样就组成手机号码了.

现在我想要登录www.housnk.com这个网站了,同样最好就是用正则表达式处理出来.
代码:

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString* message = @"你好,我的手机号码是13800138000,请登录网址http://www.housnk.com向我发一条询价邮件,我的邮箱是housnk@housnk.com";
        
//        NSString* pattern = @"1[3578]\\d{9}";
        NSString* pattern = @"http(s://|://)?(|www).\\w{2,}.(cn|com|org|net)";
        
        NSError* error = [[NSError alloc]init];
        
        NSRegularExpression* regularExpression = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
        
        NSArray* resultArray = [regularExpression matchesInString:message options:NSMatchingReportCompletion range:NSMakeRange(0, message.length)];
        
        if(resultArray.count){
            for (NSTextCheckingResult* result in resultArray) {
                NSLog(@"%@",[message substringWithRange:result.range]);
            }
        }else{
            NSLog(@"检索无结果");
        }
    }
    return 0;
}

运行结果:

RegularExpression04[3580:303] http://www.housnk.com

其实上述的规则还不是很严谨,如果是实际的地址,可能是http: //www.housnk.com/login/user这样的网址,所以不是很严谨,所以我们只要匹配以http或者https和www开头的网址,不以汉字为结尾的规则就可以了,

代码示例:

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString* message = @"你好,我的手机号码是13800138000,请登录网址http://www.housnk.com向我发一条询价邮件,我的邮箱是housnk@housnk.com";
        
//        NSString* pattern = @"1[3578]\\d{9}";
//        NSString* pattern = @"http(s://|://)?(|www).\\w{2,}.(cn|com|org|net)";
        NSString* pattern = @"http(s://|://)?(|www).[^\u4e00-\u9fa5]{2,}";
        
        NSError* error = [[NSError alloc]init];
        
        NSRegularExpression* regularExpression = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
        
        NSArray* resultArray = [regularExpression matchesInString:message options:NSMatchingReportCompletion range:NSMakeRange(0, message.length)];
        
        if(resultArray.count){
            for (NSTextCheckingResult* result in resultArray) {
                NSLog(@"%@",[message substringWithRange:result.range]);
            }
        }else{
            NSLog(@"检索无结果");
        }
    }
    return 0;
}

运行结果:

RegularExpression04[836:303] http://www.housnk.com
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值