博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(一一〇)正則表達式的基本使用与RegexKitLite的使用
阅读量:6002 次
发布时间:2019-06-20

本文共 2127 字,大约阅读时间需要 7 分钟。

正則表達式经常常使用于匹配keyword,以下先介绍基本的语法。

【基本的语法】

①中括号表示满足当中之中的一个就可以,比如[abc],则这个位置能够是a、b、c中随意一个。

②在中括号里,能够通过-连接范围,比如a-z;多个范围之间并列不须要不论什么分隔符,比如[a-zA-Z]

③表示反复次数用{x}。比如[a-z]{2}表示连续2次;表示反复次数的范围可用{x,y}。

④\\d表示数字。

⑤正則表達式默认的是贪婪匹配,比如[a-z]{2,4},假设出现类似abcde2ab这种字符串,abcd满足最大长度4,因此会作为一个字符串、e是第二个、ab是第三个。

⑥通配符为.(点)。.表示除换行符意外的随意字符。

⑦?

表示0个或一个前面的字符、+代表至少一个、*代表0个或多个。

    比如zo*。*代表o能够是0个或者多个o。也就是说能够是z、zoo。

⑧以什么开头用^,以什么结尾用$。

⑨OC字符串中的特殊字符用\转义。

    比如[ ]是正则中的特殊表达式。\[是普通的'['字符,而OC中\有特殊含义,须要对\再转义。因此用\\[表示'['。

⑩表示中文的范围为 \\u4e00-\\u9fa5。

⑪多个匹配条件的并列用|。

匹配时一定要注意贪婪匹配的问题,否则可能会出错。

以下介绍OC自带的正則表達式对象。

【NSRegularExpression的使用】

首先创建对象,然后通过匹配模式得到NSTextCheckingResult数组,从中取出对象能够拿到匹配到的字符的范围。

以下的代码演示了从一个字符串中找出main和if的范围。

NSString *code = @"mainjiaoififsiifnelsetifajomainiskkl"; NSString *pattern1 = @"main|if"; NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern1 options:0 error:nil]; NSArray *results = [regex matchesInString:code options:0 range:NSMakeRange(0, code.length)];        for (NSTextCheckingResult *result in results) {           NSLog(@"%@",NSStringFromRange(result.range));           }
利用系统的对象进行匹配比較麻烦,以下介绍一个强大的第三方库RegexKitLite。

【集成RegexKitLite】

①首先从github下载。

②将文件RegexKitLite.m和.h导入到project。

③因为该库比較老,不支持ARC,因此应该为RegexKitLite.m加入编译标记-fno-objc-arc进行局部ARC禁止。

④加入动态库libicucore.dylib。

注意③和④都在Build Phases中进行设置,例如以下图所看到的:

通过以上几步就完毕了集成,以下介绍该库的经常用法。

该库是NSString的分类,因此字符串能够直接调用方法。经常使用的方法有匹配和切割。

①匹配:传入匹配模式pattern就可以。能够获取匹配到的字符串和范围。

[str enumerateStringsMatchedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {                NSRange range = *capturedRanges;     NSLog(@"%@ %@",*capturedStrings,NSStringFromRange(range));            }];
②切割:有时候有一种需求。须要获取到全部匹配到的内容之外的字串。也就是利用正则内容切割字符串,能够得到匹配到的字串以外的字符串和范围。

[str enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSInteger captureCount, NSString *const __unsafe_unretained *capturedStrings, const NSRange *capturedRanges, volatile BOOL *const stop) {            NSRange range = *capturedRanges;     NSLog(@"%@ %@",*capturedStrings,NSStringFromRange(range));        }];

你可能感兴趣的文章
Zeppelin集成LDAP权限验证的配置
查看>>
Windows平台上实现P2P服务(四)
查看>>
windows 查看当前是哪些用户在使用共享文件
查看>>
JDK内置工具使用
查看>>
如果你是12306网站架构师,你会如何设计网站的软件架构和硬件系统架构?
查看>>
我的友情链接
查看>>
JSP/Servlet及相关技术详解(一)
查看>>
广播 BroadCastReceiver
查看>>
我的友情链接
查看>>
Secure Delivery Center常见用例(一)
查看>>
十大移动应用程序开发趋势,你知道几个?
查看>>
智能指针(模拟实现AutoPtr、ScopedPtr、SharedPtr)
查看>>
计算器的函数实现
查看>>
Javascript强化教程——什么是函数?
查看>>
Sqoop新品来了
查看>>
Linux学习笔记——grep及正则表达式
查看>>
面向对象1
查看>>
怎么实现运维自动化
查看>>
配置文件
查看>>
使用ExternalDNS自动化DNS配置
查看>>