美文网首页iOS 开发每天分享优质文章
iOS利用正则表达式得到所有符合条件的字符串所处的范围

iOS利用正则表达式得到所有符合条件的字符串所处的范围

作者: 举个栗子wow | 来源:发表于2016-07-01 15:37 被阅读650次

还是上次的@效果,要从一串字符串中匹配出符合条件(以@开头且为车牌号)的字符串。
首先根据条件写个正则:

NSString *carNumberPattern = @"[@]{1}[\u4E00-\u9FA5]{1}[A-Z]{1}[A-Z_0-9]{5}";

然后就用到了iOS自带的NSRegularExpression这个类去解析这个正则表达式,类方法快速创建对象:

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

第一个参数不用说就是要解析的正则表达式,第二个参数作用如下:

typedef NS_OPTIONS(NSUInteger, NSRegularExpressionOptions) {  
NSRegularExpressionCaseInsensitive             = 1 << 0, //不区分字母大小写的模式   
NSRegularExpressionAllowCommentsAndWhitespace  = 1 << 1, //忽略掉正则表达式中的空格和#号之后的字符   
NSRegularExpressionIgnoreMetacharacters        = 1 << 2, //将正则表达式整体作为字符串处理   
NSRegularExpressionDotMatchesLineSeparators    = 1 << 3, //允许.匹配任何字符,包括换行符     
NSRegularExpressionAnchorsMatchLines           = 1 << 4, //允许^和$符号匹配行的开头和结尾   
NSRegularExpressionUseUnixLineSeparators       = 1 << 5, //设置\n为唯一的行分隔符,否则所有的都有效。   
NSRegularExpressionUseUnicodeWordBoundaries    = 1 << 6 //使用Unicode TR#29标准作为词的边界,否则所有传统正则表达式的词边界都有效
};

因为车牌号中没有小写字母,所以操作选项不能选第一个:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:carNumberPattern options:NSRegularExpressionDotMatchesLineSeparators error:&error ];

这个对象有下面几个方法可以获取到符合条件的信息:

- (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;//返回第一个匹配结果的range

因为可能有多个@,所以用第一个方法。这个方法返回了一个装有NSTextCheckingResult对象的数组,NSTextCheckingResult对象有一个range属性,记录了它所处的范围。注:这个中的元素顺序是倒序排列的,例如第一个符合条件的结果放在了数组的最末尾。可以在得到range之后按location进行一次升序排列。

相关文章

  • iOS利用正则表达式得到所有符合条件的字符串所处的范围

    还是上次的@效果,要从一串字符串中匹配出符合条件(以@开头且为车牌号)的字符串。首先根据条件写个正则: 然后就用到...

  • 【现学现忘&Shell编程】— 25.基础正则表达式

    1、正则表达式说明 正则表达式和通配符的区别 正则表达式用来在文件中匹配符合条件的字符串。 通配符用来匹配符合条件...

  • 谓词

    过滤数组中的字符串 判断对象是否符合某种条件 过滤自定义对象的实例变量符合某种条件 匹配正则表达式

  • 正则匹配

    1、re.findall(正则表达式,待匹配字符串),找到所有符合正则表达式的字符串,返回列表,没找到返回空列表 ...

  • 关于正则表达式

    1,默认情况下正则表达式是严格区分大小写的 2,re模块的findall方法会匹配文本中所有符合条件的字符串,返回...

  • Java——正则表达式搜索所有子串

    需求 搜索字符串(下文称主串)中所有符合某正则表达式的子串,并得到所有子串的文字、位置、长度。 需求案例 一段长文...

  • 第十一章shell编程

    11.1 基础正则表达式 1、正则表达式(对应字符串)与通配符(对应文件名) 正则表达式用来在文件中匹配符合条件...

  • Shell编程

    基础正则表达式 1、正则表达式与通配符 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、aw...

  • 从零开始学习Linux(四十):Shell编程之正则表达式

    1、正则表达式与通配符 正则表达式:用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命...

  • 正则表达式与通配符

    1. 正则表达式与通配符 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命...

网友评论

    本文标题:iOS利用正则表达式得到所有符合条件的字符串所处的范围

    本文链接:https://www.haomeiwen.com/subject/qbgfjttx.html