一、介绍

在开发中,有时我们需要对一串字符串做特殊的处理后再使用,例如判断是不是特殊字符、去掉所有的特殊字符等。做处理的方法有很多,最简单的就是for循环遍历一个个的比较处理,最好用的应该是使用正则表达式。

二、正则

三、API

NSRegularExpression匹配:

/*
遍历的模式,正则表达式匹配在指定options和range模式下匹配指定string,传入block中可以获取结果信息
*/
- (void)enumerateMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range usingBlock:(void (NS_NOESCAPE ^)(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL *stop))block; /*
在指定options和range模式下匹配指定string,通过正则匹配返回一个匹配结果的数组
*/
- (NSArray<NSTextCheckingResult *> *)matchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range; /*
返回满足条件的匹配次数
*/
- (NSUInteger)numberOfMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range; /*
匹配返回的第一个结果,NSTextCheckingResult类型
*/
- (nullable NSTextCheckingResult *)firstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range; /*
匹配返回的第一个结果的NSRange范围信息
*/
- (NSRange)rangeOfFirstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

相关的NSMatchingOptions 枚举和NSMatchingFlags 枚举

typedef NS_OPTIONS(NSUInteger, NSMatchingOptions) {
NSMatchingReportProgress = << , //找到最长的匹配字符串后调用block回调
NSMatchingReportCompletion = << , //找到任何一个匹配串后都回调一次block
NSMatchingAnchored = << , //从匹配范围的开始处进行匹配
NSMatchingWithTransparentBounds = << , //允许匹配的范围超出设置的范围
NSMatchingWithoutAnchoringBounds = << //禁止^和$自动匹配行还是和结束
}; typedef NS_OPTIONS(NSUInteger, NSMatchingFlags) {
NSMatchingProgress = << , //匹配到最长串后被设置
NSMatchingCompleted = << , //全部分配完成后被设置
NSMatchingHitEnd = << , //匹配到设置范围的末尾时被设置
NSMatchingRequiredEnd = << , //当前匹配到的字符串在匹配范围的末尾时被设置
NSMatchingInternalError = << //由于错误导致的匹配失败时被设置
};

NSRegularExpression替换:

/*
在指定的options和指定的range中,用新字段替换原文本中的对应字段,并返回操作后的NSString
*/
- (NSString *)stringByReplacingMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range withTemplate:(NSString *)templ; /*
用新字段替换原文本中的对应字段,并返回操作次数(替换字段的个数)
*/
- (NSUInteger)replaceMatchesInString:(NSMutableString *)string options:(NSMatchingOptions)options range:(NSRange)range withTemplate:(NSString *)templ; /*
在 string 中查找由 result + offset 指定的字符串, 返回 template 指定的字符串(比如$0-9等)
*/
- (NSString *)replacementStringForResult:(NSTextCheckingResult *)result inString:(NSString *)string offset:(NSInteger)offset template:(NSString *)templ; /*
正则表达式字符串, 包括一些特殊字符.
*/
+ (NSString *)escapedTemplateForString:(NSString *)string;

三、使用

(1)去掉所有的特殊字符和标点符号

+(NSString *)deleteCharacters:(NSString *)targetString{

    if (targetString.length== || !targetString) {
return nil;
} NSError *error = nil;
NSString *pattern = @"[^a-zA-Z0-9\u4e00-\u9fa5]";//正则取反
NSRegularExpression *regularExpress = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];//这个正则可以去掉所有特殊字符和标点
NSString *string = [regularExpress stringByReplacingMatchesInString:targetString options: range:NSMakeRange(, [targetString length]) withTemplate:@""]; return string;
}

(2)判断是否是特殊字符或者标点符号

+(BOOL)isCharacters:(NSString *)targetString{

    NSString *regex = @"[\u4e00-\u9fa5|0-9|a-zA-Z]";
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
return ![pred evaluateWithObject:targetString];
}

最新文章

  1. 【React】组件生命周期
  2. Ansible-playbook批量部署,更新war脚本,可以再完善----后续再update
  3. mybatis 中sql语句传递多个参数
  4. 552 you must authentication
  5. Android热修复
  6. C\C++拾遗------C#程序员重温C\C++之要点
  7. xubuntu install nodejs
  8. Java 线程池详细介绍
  9. 【剑指offer】员工年龄排序
  10. poj1001求幂
  11. Visual Studio 2013怎么关闭智能提示?
  12. dedecms判断当前页面是否为首页 织梦设置首页高亮
  13. composer PHP Fatal error致命错误
  14. python操作文件练习,配置haproxy
  15. windows 10 安装TortoiseSVN.msi时报2503的错误
  16. 转--python 黑魔法2
  17. 全面了解HTTP请求方法说明
  18. 51nod 1450 闯关游戏
  19. 必应词典手机版(IOS版)与有道词典(IOS版)之软件分析【功能篇】【用户体验篇】
  20. Eclipse 中选中一个单词 ,其他相同的单词颜色就会变化

热门文章

  1. 前端工程化-webpack简介(一)
  2. bootstrap----屏幕大小切换
  3. codeforce 139E
  4. Linux学习笔记:ftp中binary二进制与ascii传输模式的区别
  5. MVC开发中的常见错误-03-System.Data.Entity.Validation.DbEntityValidationException: 对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性。
  6. [转] 可跨域的单点登录(SSO)实现方案
  7. [转] h5上传视频或文件编写
  8. canvas画多边形
  9. Codeforces 251C Number Transformation
  10. MooFest POJ1990