一、介绍

在开发中,有时我们需要对一串字符串做特殊的处理后再使用,例如判断是不是特殊字符、去掉所有的特殊字符等。做处理的方法有很多,最简单的就是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];
}

iOS:使用NSRegularExpression正则去掉一串字符串中所有的特殊字符和标点的更多相关文章

  1. 用正则匹配一串字符串中的ip地址

    IP地址有4段组成,每一段数字的范围为0-255,在一段文本中提取ip地址可以这样 $src = 'src = alsdlk ks sdf2.3.3.4 234.193.1.120.1232 d.23 ...

  2. PHP去掉转义后字符串中的反斜杠\函数stripslashes

    addslashes函数主要是在字符串中添加反斜杠对特殊字符进行转义,stripslashes则是去掉转义后字符串中的反斜杠\,比如当你提交一段 json数据到PHP端的时候可能会遇到json字符串中 ...

  3. (转载)PHP去掉转义后字符串中的反斜杠\函数stripslashes

    (转载)http://www.beijibear.com/index.php?aid=182 addslashes()函数主要是在字符串中添加反斜杠对特殊字符进行转义,stripslashes()则是 ...

  4. 黄聪:PHP去掉转义后字符串中的反斜杠\函数stripslashes

    addslashes函数主要是在字符串中添加反斜杠对特殊字符进行转义,stripslashes则是去掉转义后字符串中的反斜杠\,比如当你提交一段json数据到PHP端的时候可能会遇到json字符串中有 ...

  5. c# 正则表达式替换字符串中常见的特殊字符

    第一种,若字符串中含有字母,则使用以下方法 public static string RemoveSpecialCharacterToupper(string hexData) { //下文中的‘\\ ...

  6. 正则获取html标签字符串中图片地址

    html标签字符串: var htmlStr = "<div class='testClass'><img=http://www.chinanews.com/part/ho ...

  7. js正则判断字符串中是否包含特殊字符和空格

    字符串只能是数字.字母和中文组成,不能包含特殊符号和空格. /^[\u4e00-\u9fa5_a-zA-Z0-9]+$/

  8. 在一串字符串中找到与正则表达式匹配的字符串?(例如:export_20170717_out.log 找到20170717)

    如题:提取字符串:export_20170717_out.log 对应的日期: package dodo; import java.util.regex.Matcher; import java.ut ...

  9. js 查找一串字符串中一段字符

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. 如何设置font-family

    第一部分: 根据font-family的原则,假如客户终端不认识前面的字体,就自动切换到第二种字体,第二种不认识就切换到第三种,以此类推.假如都不能识别就调用默认字体 根据font-family的字体 ...

  2. Laravel Eloquent 自定义返回字段

    返回指定字段 Book::select("price", "name")->all(); 返回关系字段关联的属性 Book::select("p ...

  3. CSS3:透明度

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. mysql替换字符串

    今天要替换数据库里的所有字符串 例如把http改成https UPDATE table_name set colum_name=REPLACE(colum_name,'http','https')

  5. PDA智能程序访问WebService,报告“未能建立与网络的连接”

    其实就是你没又连接上网络.首先下个第三方软件关于vs模拟器连接的.然后根据以下说明操作就可以连接了在确保主机已连上互联网的情况下,按以下步骤设置: 1.打开ActiveSync ,点击“文件”——&g ...

  6. python全栈开发day46-BOM、位置信息、jQurey

    一.昨日内容回顾 1.DOM节点获取:三种方式 2.属性的设置: getAttirbute() setAttribute() .点设置,[]设置 3.节点的创建:   var oDiv = creat ...

  7. 8. 博客系统| 富文本编辑框和基于bs4模块防御xss攻击

    views.py @login_required def cn_backend(request): article_list = models.Article.objects.filter(user= ...

  8. 015 在大数据中,关于mapreduce的粗略优化,以及mapreduce的处理过程解释

    使用的案例是wordcountmapreduce的程序演示 一: 1.源程序 2.优化的切入点 3.优化的部分代码 二:wordcount的处理过程 1.重点 一个块对应一个map任务. 而做单词统计 ...

  9. linux下php命令无法使用如何解决

    本文主要和大家分享linux下php命令无法使用如何解决,测试是否添加php环境变量方法: 如下:输入php -v 显示 php 命令没有找到 [root@iz8vbhc4d7zoazstpw7gw8 ...

  10. hdu-1754 I Hate It【线段树】(求区间最大值)

    <题目链接> I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...