转:http://blog.csdn.net/nullcn/article/details/6338592

准备工作,下载RegexKitLite 软件包,解压后有2个文件,需要加载到project中。

然后还要加载framework libicucore.dylib ,因为RegexKitLite是调用这个里面的API,苹果规定过不能使用私有的api和没有发布的api。实际上RegexKitLite对NSString做了扩展,目前只支持NSString,对我来说也够了...

基本使用的例子(更多信息参看 官方文档) 
1.

  1. NSString *searchString = @ "This is neat." ;
  2. NSString *regexString  = @"(//w+)//s+(//w+)//s+(//w+)" ;
  3. NSRange   matchedRange = NSMakeRange(NSNotFound, 0UL);
  4. NSError  *error        = NULL;
  5. matchedRange = [searchString rangeOfRegex:regexString options:RKLNoOptions inRange:searchRange capture:2L error:&error];
  6. NSLog(@"matchedRange: %@" , NSStringFromRange(matchedRange));
  7. // 2008-03-18 03:51:16.530 test[51583:813] matchedRange: {5, 2},//匹配到‘is‘
  8. NSString *matchedString = [searchString substringWithRange:matchedRange];
  9. NSLog(@"matchedString: '%@'" , matchedString);
  10. // 2008-03-18 03:51:16.532 test[51583:813] matchedString: 'is' //生成子字符串
  1. NSString *searchString = @"This is neat.";
  2. NSString *regexString  = @"(//w+)//s+(//w+)//s+(//w+)";
  3. NSRange   matchedRange = NSMakeRange(NSNotFound, 0UL);
  4. NSError  *error        = NULL;
  5. matchedRange = [searchString rangeOfRegex:regexString options:RKLNoOptions inRange:searchRange capture:2L error:&error];
  6. NSLog(@"matchedRange: %@", NSStringFromRange(matchedRange));
  7. // 2008-03-18 03:51:16.530 test[51583:813] matchedRange: {5, 2},//匹配到‘is‘
  8. NSString *matchedString = [searchString substringWithRange:matchedRange];
  9. NSLog(@"matchedString: '%@'", matchedString);
  10. // 2008-03-18 03:51:16.532 test[51583:813] matchedString: 'is' //生成子字符串

2.找到第一个匹配并返回一个NSString

  1. NSString *searchString  = @ "This is neat." ;
  2. NSString *regexString   = @"(//w+)//s+(//w+)//s+(//w+)" ;
  3. NSString *matchedString = [searchString stringByMatching:regexString capture:2L];
  4. NSLog(@"matchedString: '%@'" , matchedString);
  5. // 2008-03-18 03:53:42.949 test[51583:813] matchedString: 'is'
  1. NSString *searchString  = @"This is neat.";
  2. NSString *regexString   = @"(//w+)//s+(//w+)//s+(//w+)";
  3. NSString *matchedString = [searchString stringByMatching:regexString capture:2L];
  4. NSLog(@"matchedString: '%@'", matchedString);
  5. // 2008-03-18 03:53:42.949 test[51583:813] matchedString: 'is'

3.查找和替换,加括号和概念和Python中的一样,$1指代第一个括号中的内容

  1. NSString *searchString      = @ "This is neat." ;
  2. NSString *regexString       = @"//b(//w+)//b" ;
  3. NSString *replaceWithString = @"{$1}" ;
  4. NSString *replacedString    = NULL;
  5. replacedString = [searchString stringByReplacingOccurrencesOfRegex:regexString withString:replaceWithString];
  6. //NSMutableString可以直接替换,并返回替换的次数
  7. NSLog(@"replaced string: '%@'" , replacedString);
  8. // 2008-07-01 19:03:03.195 test[68775:813] replaced string: '{This} {is} {neat}.'
  9. NSMutableString *mutableString     = [NSMutableString stringWithString:@"This is neat." ];
  10. NSString        *regexString       = @"//b(//w+)//b" ;
  11. NSString        *replaceWithString = @"{$1}" ;
  12. NSUInteger       replacedCount     = 0UL;
  13. replacedCount = [mutableString replaceOccurrencesOfRegex:regexString withString:replaceWithString];
  14. NSLog(@"count: %lu string: '%@'" , (u_long)replacedCount, mutableString);
  15. // 2008-07-01 21:25:43.433 test[69689:813] count: 3 string: '{This} {is} {neat}.'
  1. NSString *searchString      = @"This is neat.";
  2. NSString *regexString       = @"//b(//w+)//b";
  3. NSString *replaceWithString = @"{$1}";
  4. NSString *replacedString    = NULL;
  5. replacedString = [searchString stringByReplacingOccurrencesOfRegex:regexString withString:replaceWithString];
  6. //NSMutableString可以直接替换,并返回替换的次数
  7. NSLog(@"replaced string: '%@'", replacedString);
  8. // 2008-07-01 19:03:03.195 test[68775:813] replaced string: '{This} {is} {neat}.'
  9. NSMutableString *mutableString     = [NSMutableString stringWithString:@"This is neat."];
  10. NSString        *regexString       = @"//b(//w+)//b";
  11. NSString        *replaceWithString = @"{$1}";
  12. NSUInteger       replacedCount     = 0UL;
  13. replacedCount = [mutableString replaceOccurrencesOfRegex:regexString withString:replaceWithString];
  14. NSLog(@"count: %lu string: '%@'", (u_long)replacedCount, mutableString);
  15. // 2008-07-01 21:25:43.433 test[69689:813] count: 3 string: '{This} {is} {neat}.'

4.用于拆分,返回一个拆分后的字符串数组

  1. NSString *searchString = @ "This is neat." ;
  2. NSString *regexString  = @"//s+" ;
  3. NSArray  *splitArray   = NULL;
  4. splitArray = [searchString componentsSeparatedByRegex:regexString];
  5. // splitArray == { @"This", @"is", @"neat." }
  6. NSLog(@"splitArray: %@" , splitArray);
  1. NSString *searchString = @"This is neat.";
  2. NSString *regexString  = @"//s+";
  3. NSArray  *splitArray   = NULL;
  4. splitArray = [searchString componentsSeparatedByRegex:regexString];
  5. // splitArray == { @"This", @"is", @"neat." }
  6. NSLog(@"splitArray: %@", splitArray);

5.返回所有匹配的字符串数组,这个例子中虽然有多个括号,但是 componentsMatchedByRegex不管

  1. NSString *searchString = @ "$10.23, $1024.42, $3099" ;
  2. NSString *regexString  = @"//$((//d+)(?://.(//d+)|//.?))" ;
  3. NSArray  *matchArray   = NULL;
  4. matchArray = [searchString componentsMatchedByRegex:regexString];
  5. // matchArray == { @"$10.23", @"$1024.42", @"$3099" };
  6. NSLog(@"matchArray: %@" , matchArray);
  7. 6.返回所有匹配的字符串数组处理所有的括号
  8. NSString *searchString  = @"$10.23, $1024.42, $3099" ;
  9. NSString *regexString   = @"//$((//d+)(?://.(//d+)|//.?))" ;
  10. NSArray  *capturesArray = NULL;
  11. capturesArray = [searchString arrayOfCaptureComponentsMatchedByRegex:regexString];
  12. /* capturesArray ==
  13. [NSArray arrayWithObjects:
  14. [NSArray arrayWithObjects:  @"$10.23",   @"10.23",   @"10", @"23", NULL],
  15. [NSArray arrayWithObjects:@"$1024.42", @"1024.42", @"1024", @"42", NULL],
  16. [NSArray arrayWithObjects:   @"$3099",    @"3099", @"3099",   @"", NULL],
  17. NULL];
  18. */
  19. NSLog(@"capturesArray: %@" , capturesArray);
  20. 输出结果:
  21. shell% ./capturesArray↵
  22. 2009-05-06 03:25:46.852 capturesArray[69981:10b] capturesArray: (
  23. (
  24. "$10.23" ,
  25. "10.23" ,
  26. 10,
  27. 23
  28. ),
  29. (
  30. "$1024.42" ,
  31. "1024.42" ,
  32. 1024,
  33. 42
  34. ),
  35. (
  36. "$3099" ,
  37. 3099,
  38. 3099,
  39. ""
  40. )
  41. )
  1. NSString *searchString = @"$10.23, $1024.42, $3099";
  2. NSString *regexString  = @"//$((//d+)(?://.(//d+)|//.?))";
  3. NSArray  *matchArray   = NULL;
  4. matchArray = [searchString componentsMatchedByRegex:regexString];
  5. // matchArray == { @"$10.23", @"$1024.42", @"$3099" };
  6. NSLog(@"matchArray: %@", matchArray);
  7. 6.返回所有匹配的字符串数组处理所有的括号
  8. NSString *searchString  = @"$10.23, $1024.42, $3099";
  9. NSString *regexString   = @"//$((//d+)(?://.(//d+)|//.?))";
  10. NSArray  *capturesArray = NULL;
  11. capturesArray = [searchString arrayOfCaptureComponentsMatchedByRegex:regexString];
  12. /* capturesArray ==
  13. [NSArray arrayWithObjects:
  14. [NSArray arrayWithObjects:  @"$10.23",   @"10.23",   @"10", @"23", NULL],
  15. [NSArray arrayWithObjects:@"$1024.42", @"1024.42", @"1024", @"42", NULL],
  16. [NSArray arrayWithObjects:   @"$3099",    @"3099", @"3099",   @"", NULL],
  17. NULL];
  18. */
  19. NSLog(@"capturesArray: %@", capturesArray);
  20. 输出结果:
  21. shell% ./capturesArray↵
  22. 2009-05-06 03:25:46.852 capturesArray[69981:10b] capturesArray: (
  23. (
  24. "$10.23",
  25. "10.23",
  26. 10,
  27. 23
  28. ),
  29. (
  30. "$1024.42",
  31. "1024.42",
  32. 1024,
  33. 42
  34. ),
  35. (
  36. "$3099",
  37. 3099,
  38. 3099,
  39. ""
  40. )
  41. )

iOS中使用RegexKitLite来试用正则表达式的更多相关文章

  1. iOS中使用RegexKitLite来试用正则表达式 使用ARC 20个错误解决办法

    You can also disable the ARC for the RegexKitLite only by adding a flag: select the project -> YO ...

  2. 正则表达式在iOS中的运用

    1.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...

  3. iOS中3种正则表达式的使用与比较

    正则表达式在用户注册和登录中应用很广,通过正则表达式可以判断用户输入的数据正确与否. 在iOS4.0以前开发者一般是通过谓词(NSPredicate)和加入正则表达式的第三方库(如:RegexKitL ...

  4. iOS中运用正则表达式

    iOS中运用正则表达式来匹配短信验证码,电话号码,邮箱等是比较常见的. 在iOS中运用正则表达式主要有三种方式: -:通过谓词下面是实例代码: - (BOOL)regularExpresionWith ...

  5. iOS中使用正则

    一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...

  6. iOS 中的 NSTimer

    iOS 中的 NSTimer NSTimer fire 我们先用 NSTimer 来做个简单的计时器,每隔5秒钟在控制台输出 Fire .比较想当然的做法是这样的: @interface Detail ...

  7. iOS 中的Push Notifications简单实现(APNS)

    Android中的通知只有一种,就是Local Notifications,而iOS中除了Local Notifications外,还有一种Push Notifications.ios的这2种noti ...

  8. iOS中引用计数内存管理机制分析

    在 iOS 中引用计数是内存的管理方式,虽然在 iOS5 版本中,已经支持了自动引用计数管理模式,但理解它的运行方式有助于我们了解程序的运行原理,有助于 debug 程序. 操作系统的内存管理分成堆和 ...

  9. 关于ios中的文本操作-简介

    来源:About Text Handling in iOS 官方文档 iOS平台为我们提供了许多在app中展示文本和让用户编辑文本的方式.同时,它也允许你在app视图中展示格式化的文本和网页内容.你可 ...

随机推荐

  1. eclipse安装阿里巴巴java开发规范插件

    阿里巴巴java开发规范插件 作为JAVA开发人员,始终没有一个明确的规范,何为好代码,何为坏代码,造成不同人的代码风格不同,接手别人代码后改造起来相当困难.前不久,阿里巴巴发布了<阿里巴巴Ja ...

  2. mysql存储表情字符

    windows下是my.inilinux下是my.cnf 路径是: /etc/my.cnf 参考: https://blog.csdn.net/fhzaitian/article/details/53 ...

  3. LeetCode(24): 两两交换链表中的节点

    Medium! 题目描述: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 说 ...

  4. plaidctf-2016 Pwn试题小结

    回顾了一下今年plaidctf Pwn部分的题目,感觉还是蛮有意思的,值得研究一下. 1.unix_time_formatter-76 最简单的一道题,考点是UAF.说是UAF但是其实根本就不算是真正 ...

  5. ref:linux用户和组管理,/etc/passwd,/etc/shadow和/etc/group 文件内容解释

    ref:https://www.cnblogs.com/xuha0/p/5519232.html 与用户相关的系统配置文件主要有/etc/passwd 和/etc/shadow,其中/etc/shad ...

  6. jmeter内存溢出处理方式记录

    方法一: 使用jmeter进行压力测试时 遇到一段时间后报内存溢出outfmenmory错误,导致jmeter卡死了,先尝试在jmeter.bat中增加了JVM_ARGS="- Xmx204 ...

  7. SaaS模式介绍

     SaaS是Software-as-a-service(软件即服务). SaaS是一种通过Internet提供软件的模式,用户不用再购买软件,而改用向提供商租用基于Web的软件,来管理企业经营活动,且 ...

  8. 美团开源Graver框架:用“雕刻”诠释iOS端UI界面的高效渲染

    Graver 是一款高效的 UI 渲染框架,它以更低的资源消耗来构建十分流畅的 UI 界面.Graver 独创性的采用了基于绘制的视觉元素分解方式来构建界面,得益于此,该框架能让 UI 渲染过程变得更 ...

  9. Uncaught Error: Syntax error, unrecognized expression: [flag=]报错处理方法

    今早运行项目的时候报这个错误: 百度翻译的解释是:未命名错误:语法错误,未识别表达式:[FLAG= ]   也就是书写规范问题. 可是我查了对应的js: 字符串拼接没什么问题,经常这样写. 这时看报错 ...

  10. 怎样c# java md5值保持一致

    c#方式 /// <summary> /// 获得字符串md5. /// </summary> /// <param name="myString"& ...