iOS:使用NSRegularExpression正则去掉一串字符串中所有的特殊字符和标点
一、介绍
在开发中,有时我们需要对一串字符串做特殊的处理后再使用,例如判断是不是特殊字符、去掉所有的特殊字符等。做处理的方法有很多,最简单的就是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正则去掉一串字符串中所有的特殊字符和标点的更多相关文章
- 用正则匹配一串字符串中的ip地址
IP地址有4段组成,每一段数字的范围为0-255,在一段文本中提取ip地址可以这样 $src = 'src = alsdlk ks sdf2.3.3.4 234.193.1.120.1232 d.23 ...
- PHP去掉转义后字符串中的反斜杠\函数stripslashes
addslashes函数主要是在字符串中添加反斜杠对特殊字符进行转义,stripslashes则是去掉转义后字符串中的反斜杠\,比如当你提交一段 json数据到PHP端的时候可能会遇到json字符串中 ...
- (转载)PHP去掉转义后字符串中的反斜杠\函数stripslashes
(转载)http://www.beijibear.com/index.php?aid=182 addslashes()函数主要是在字符串中添加反斜杠对特殊字符进行转义,stripslashes()则是 ...
- 黄聪:PHP去掉转义后字符串中的反斜杠\函数stripslashes
addslashes函数主要是在字符串中添加反斜杠对特殊字符进行转义,stripslashes则是去掉转义后字符串中的反斜杠\,比如当你提交一段json数据到PHP端的时候可能会遇到json字符串中有 ...
- c# 正则表达式替换字符串中常见的特殊字符
第一种,若字符串中含有字母,则使用以下方法 public static string RemoveSpecialCharacterToupper(string hexData) { //下文中的‘\\ ...
- 正则获取html标签字符串中图片地址
html标签字符串: var htmlStr = "<div class='testClass'><img=http://www.chinanews.com/part/ho ...
- js正则判断字符串中是否包含特殊字符和空格
字符串只能是数字.字母和中文组成,不能包含特殊符号和空格. /^[\u4e00-\u9fa5_a-zA-Z0-9]+$/
- 在一串字符串中找到与正则表达式匹配的字符串?(例如:export_20170717_out.log 找到20170717)
如题:提取字符串:export_20170717_out.log 对应的日期: package dodo; import java.util.regex.Matcher; import java.ut ...
- js 查找一串字符串中一段字符
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- JavaScript 使用 mediaDevices API 选择摄像头
大多数智能手机都有前置和后置摄像头,当你在创建视频应用时你可能想要选择或者切换前置.后置摄像头. 如果你开发的是一款聊天应用,你很可能会想调用前置摄像头,但如果你开发的是一款拍照软件,那么你会更倾向于 ...
- -webkit-line-clamp 限制多行文字
一.应用 CSS代码: .box { width: 100px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: ve ...
- 父窗口中获取iframe中的元素
js 在父窗口中获取iframe中的元素 1. 格式:window.frames["iframe的name值"].document.getElementById("ifr ...
- php数据类型之自动转换和强制转换
PHP在PHP 5.x阶段都是完全的弱类型的编程语言.所谓弱类型,就是在声明变量的时候,不需要指定变量的类型.我要声明一个整型的变量,我不用在前面非得写上类型,再写变量.而PHP 7 的性能有很大的提 ...
- OI中坑点总结
以下是我个人OI生涯中遇到的坑点的一个小总结,可能是我太菜了,总是掉坑里,请大佬勿喷 1,多重背包的转移的循环顺序 //默认每个物品体积为一(不想打码……) //dp[i]表示占用背包容量i所能获得的 ...
- 性能测试二:jmeter参数化+聚合报告
一.参数化 1.随机数 2.随机字符串 二.文件 1.文本,csv_read (此方式同一个并发,永远只取一行数据,同一个并发,永远只使用同一个账户,如购物车下单) 2.CSV Data Set Co ...
- 062 hive中的常用方法(case,cast,unix_timestamp)
1.case的用法 )格式1 case col when value then '' when value then '' else '' end )格式2 case when col='value' ...
- hdu 3068 最长回文【manacher】(模板题)
<题目链接> 最长回文 Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如ab ...
- Spring框架学习03——Spring Bean 的详解
1.Bean 的配置 Spring可以看做一个大型工厂,用于生产和管理Spring容器中的Bean,Spring框架支持XML和Properties两种格式的配置文件,在实际开发中常用XML格式的配置 ...
- SQL 游标 Cursor 基本用法
/* table1结构如下 id int name varchar(50) */ declare @id int ) declare cursor1 cursor for --定义游标cursor1 ...