正則表達式经常常使用于匹配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

②将文件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)); }];

(一一〇)正則表達式的基本使用与RegexKitLite的使用的更多相关文章

  1. Perl入门(四)Perl的正則表達式

    正則表達式是Perl语言的特色.主要的语法不是非常难,可是编写一个符合需求.高效的正則表達式.还是有一些挑战的. Perl的三种匹配模式 1.查找 语法:m/正則表達式内容/; 作用:查找匹配内容中是 ...

  2. python 学习笔记 10 -- 正則表達式

    零.引言 在<Dive into Python>(深入python)中,第七章介绍正則表達式,开篇非常好的引出了正則表達式,以下借用一下:我们都知道python中字符串也有比較简单的方法, ...

  3. javascript 正則表達式补充

    定义 JavaScript种正則表達式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%&g ...

  4. iOS_正則表達式

    iOS 正則表達式 正則表達式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE).计算机科学的一个概念. 正則表達式使用单个字符 ...

  5. 轻松学习JavaScript十四:JavaScript的RegExp对象(正則表達式)

    一RegExp对象概述 RegExp对象表示正則表達式,RegExp是正則表達式的缩写.它是对字符串运行模式匹配的强大工具. RegExp 对象用于规定在文本中检索的内容. 当您检索某个文本时.能够使 ...

  6. 辛星教你高速掌握PHP的正則表達式

    首先说一下,这篇文章也是我在看了数个大牛的博客之后总结出来的,因此首先向这些大牛表示崇高的敬意和感谢,因为人数众多.并且来源也是特别分散,就不一一介绍了,见谅. ************跨语言的主题* ...

  7. Python——正則表達式(2)

    本文译自官方文档:Regular Expression HOWTO 參考文章:Python--正則表達式(1) 全文下载 :Python正則表達式基础 ======================== ...

  8. JavaScript 正則表達式

    一.简单介绍 1.什么是正則表達式 正則表達式本身就是一种语言,这在其他语言是通用的. 正則表達式(regular expression)描写叙述了一种字符串匹配的模式,能够用来检查一个串是否含有某种 ...

  9. js正則表達式语法

    1. 正則表達式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之同样的 ...

随机推荐

  1. pig 调试(explain&amp;illerstrate)

    grunt> cat t.txt kw1 2 kw3 1 kw2 4 kw1 5 kw2 2 cat test.pig A = LOAD '/user/input/t.txt' as (k:ch ...

  2. Java常用知识(长期更新)

    1.0转义符 \n:换行 ,\n的作用和print后面的ln相同,可酌情使用 \t:一个制表位(一系列空格) 例: public class Schedule{ public static void ...

  3. 反弹木马——本质上就是一个开80端口的CS程序,伪造自己在浏览网页

    反弹端口型木马分析了防火墙的特性后发现:防火墙对于连入的链接往往会进行非常严格的过滤,但是对于连出的链接却疏于防范.于是,与一般的木马相反,反弹端口型木马的服务端(被控制端)使用主动端口,客户端(控制 ...

  4. ios发布以后关键信息确认与nslog

    发布以后信息查看的路径: xcode->window->devices and …->查看如图的log. 通常在发布以后,处于安全和性能的考虑,会禁止打印log:但是在关键的信息需要 ...

  5. 使用let's encrypt为你的Ubuntu14+nginx网站保驾护航!

    finch最近正在研究一个新的网站系统,闲的没事想搞搞ssl,结果搞了两天,遇到很多问题,现在记录并分享一下经验. 环境之前搭建好了是Ubuntu14+nginx+php5+mysql 现在开始使用l ...

  6. Python学习笔记(1)--Windows基本环境搭建

    1.安装Python 官网下载地址:https://www.python.org/downloads/ 下载完成后安装选择自定义安装,并勾选自动填写环境变量,如果是默认安装,还需要自己手动配置环境变量 ...

  7. iOS 全局修改UINavigation 后退按钮

    将导航栏的后退按钮中的文字去掉一直是老大难问题,现在可以使用运行时机制,将后退按钮文字清空 创建UINavigationItem的category,直接上代码 .h文件 #import <UIK ...

  8. JAVA JS 中的 modulus exponent 生成 C# 公匙

    C#用的是xml,里面是base64编码的.你上面的就是hex格式,只要把上面hex格式转成byte数组,然后在base64编码就可以了. public static byte[] Hex2Byte( ...

  9. Servlet具体解释

    Servlet具体解释 基本概述 Session在计算机中,尤其是在网络应用中,称为"会话控制".在计算机专业术语中.Session是指一个终端用户与交互系统进行通信的时间间隔,通 ...

  10. 为OLED屏添加GUI支持2:2D图形库

    为OLED屏添加GUI支持2:2D图形库 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:S ...