iOS中正则表达式的运用示例代码

2020-01-21 00:45:48刘景俊

前言

有时我们需要在一大段长文本中过滤出我们需要的字段,或者检验该文本是否符合要求(该文本是否是邮箱,链接,电话号码或身份证),这时候就需要用到正则表达式了,iOS中也加入了相关的类来支持正则表达式的使用。本文详细介绍了关于iOS正则表达式运用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

一、NSRegularExpression

1. 正则表达式的创建


+ (nullable NSRegularExpression *)regularExpressionWithPattern:(NSString *)pattern options:(NSRegularExpressionOptions)options error:(NSError **)error;

- (nullable instancetype)initWithPattern:(NSString *)pattern options:(NSRegularExpressionOptions)options error:(NSError **)error

该类中的属性

pattern 返回正则表达式模式 options 返回创建正则表达式选项时使用的选项 numberOfCaptureGroups 返回正则表达式模式

options 定义的枚举类型如下:


 typedef NS_OPTIONS(NSUInteger, NSRegularExpressionOptions) {
 NSRegularExpressionCaseInsensitive  = 1 << 0, //不区分大小写的
 NSRegularExpressionAllowCommentsAndWhitespace = 1 << 1, //忽略空格和# -
 NSRegularExpressionIgnoreMetacharacters = 1 << 2, //整体化
 NSRegularExpressionDotMatchesLineSeparators = 1 << 3, //匹配任何字符,包括行分隔符
 NSRegularExpressionAnchorsMatchLines  = 1 << 4, //允许^和$在匹配的开始和结束行
 NSRegularExpressionUseUnixLineSeparators = 1 << 5, //(查找范围为整个无效)
 NSRegularExpressionUseUnicodeWordBoundaries = 1 << 6 //(查找范围为整个无效)
 };

2. 搜索字符串


//枚举允许Block处理每个正则表达式匹配的字符串
- (void)enumerateMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range usingBlock:(void (NS_NOESCAPE ^)(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL *stop))block;

//返回一个数组,包含字符串中正则表达式的所有匹配项
- (NSArray<NSTextCheckingResult *> *)matchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

//返回字符串指定范围内匹配数
- (NSUInteger)numberOfMatchesInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

//返回字符串指定范围内第一个匹配项。
- (nullable NSTextCheckingResult *)firstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

//返回字符串指定范围内第一个匹配的范围
- (NSRange)rangeOfFirstMatchInString:(NSString *)string options:(NSMatchingOptions)options range:(NSRange)range;

NSMatchingOptions的定义如下:


typedef NS_OPTIONS(NSUInteger, NSMatchingOptions) {
 NSMatchingReportProgress   = 1 << 0,  /* 在长时间运行的匹配操作中定期调用Block */
 NSMatchingReportCompletion  = 1 << 1,  /* 完成任何匹配后,调用Block一次*/
 NSMatchingAnchored    = 1 << 2,  /*指定匹配仅限于搜索范围开始时的匹配 */
 NSMatchingWithTransparentBounds = 1 << 3,  /* 定匹配可以检查超出搜索范围的范围的字符串的部分,以用于诸如字边界检测,前瞻等。如果搜索范围包含整个字符串,该常量将不起作用 */
 NSMatchingWithoutAnchoringBounds = 1 << 4  /* 指定^并且$不会自动匹配搜索范围的开始和结束,但仍将与整个字符串的开头和结尾相匹配。如果搜索范围包含整个字符串,则该常量不起作用 */
};