博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS:使用NSRegularExpression正则去掉一串字符串中所有的特殊字符和标点
阅读量:7217 次
发布时间:2019-06-29

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

一、介绍

在开发中,有时我们需要对一串字符串做特殊的处理后再使用,例如判断是不是特殊字符、去掉所有的特殊字符等。做处理的方法有很多,最简单的就是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
*)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         = 1 << 0, //找到最长的匹配字符串后调用block回调   NSMatchingReportCompletion       = 1 << 1, //找到任何一个匹配串后都回调一次block   NSMatchingAnchored               = 1 << 2, //从匹配范围的开始处进行匹配   NSMatchingWithTransparentBounds  = 1 << 3, //允许匹配的范围超出设置的范围   NSMatchingWithoutAnchoringBounds = 1 << 4  //禁止^和$自动匹配行还是和结束};typedef NS_OPTIONS(NSUInteger, NSMatchingFlags) {   NSMatchingProgress               = 1 << 0, //匹配到最长串后被设置        NSMatchingCompleted              = 1 << 1, //全部分配完成后被设置       NSMatchingHitEnd                 = 1 << 2, //匹配到设置范围的末尾时被设置      NSMatchingRequiredEnd            = 1 << 3, //当前匹配到的字符串在匹配范围的末尾时被设置        NSMatchingInternalError          = 1 << 4  //由于错误导致的匹配失败时被设置   };

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==0 || !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:0 range:NSMakeRange(0, [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];}

 

转载地址:http://cgtym.baihongyu.com/

你可能感兴趣的文章
用户变量和系统变量的区别
查看>>
CCTextFieldTTF 与 5种常用CCMenuItem
查看>>
线程池
查看>>
MVC下载文件方式
查看>>
进程间通信(三)—信号量
查看>>
How to create a site with AJAX enabled in MVC framework.
查看>>
PC软件/web网站/小程序/手机APP产品如何增加个人收款接口
查看>>
为git服务器配置gitosis管理权限
查看>>
How to call DLL and LIB files (SDK)
查看>>
VS2010在工具栏上创建查找组合框,即:CMFCToolBar中加入CMFCToolBarComboBoxButton
查看>>
转载非原创:修改BB 的内容,回车后修改CC 的值
查看>>
如何创建一个静态类
查看>>
密码学中经典算法及应用
查看>>
STM32配置一般过程(持续更新中)
查看>>
编程之美:无差错二分查找
查看>>
K-Means 及 K-Means++
查看>>
信号量
查看>>
svn command line tag
查看>>
codefirst updatebase
查看>>
这位华裔天才数学家情商也蛮高,他给了25条职业建议
查看>>