当前位置: 移动技术网 > 移动技术>移动开发>IOS > iOS 正则表达式详解

iOS 正则表达式详解

2019年07月24日  | 移动技术网移动技术  | 我要评论

一、系统自带正则表达式用法

除了正则可以用,还有nsscanner这个类可以达到某些相同的效果

1、创建正则表达式对象

nsstring * reg = @"[0-9]+";//字符串正则表达式nserror *error = null;//错误对象nsregularexpression *regex = [nsregularexpression regularexpressionwithpattern:reg options:nsregularexpressioncaseinsensitive error:&error];//匹配reg的正则表达式对象 

2、正则表达式对象可调用的方法

/**1 * 正则表达式匹配 * * @param string 在此字符串中匹配 * @param options 一般填0 * @param range 在此范围内匹配 * @param block 在block内会把匹配到的结果逐个返回nstextcheckingresult,通过此对象的range属性可以查看匹配到的字符串的location和length,同过substring方法可以得到被匹配字符串 */- (void)enumeratematchesinstring:(nsstring *)string options:(nsmatchingoptions)options range:(nsrange)range usingblock:(void (^)(nstextcheckingresult * __nullable result, nsmatchingflags flags, bool *stop))block; /**2 * 正则表达式匹配 * * @param string 在此字符串中匹配 * @param options 一般填0 * @param range 在此范围内匹配 * @param block 返回数组,数组内是每个匹配到的nstextcheckingresult */- (nsarray<nstextcheckingresult *> *)matchesinstring:(nsstring *)string options:(nsmatchingoptions)options range:(nsrange)range; /**3 * 正则表达式匹配 * * @param string 在此字符串中匹配 * @param options 一般填0 * @param range 在此范围内匹配 * @param block 返回匹配到的个数 */- (nsuinteger)numberofmatchesinstring:(nsstring *)string options:(nsmatchingoptions)options range:(nsrange)range; /**4 * 正则表达式匹配 * * @param string 在此字符串中匹配 * @param options 一般填0 * @param range 在此范围内匹配 * @param block 返回第一次匹配到的nstextcheckingresult对象 */- (nullable nstextcheckingresult *)firstmatchinstring:(nsstring *)string options:(nsmatchingoptions)options range:(nsrange)range; /**5 * 正则表达式匹配 * * @param string 在此字符串中匹配 * @param options 一般填0 * @param range 在此范围内匹配 * @param block 返回第一次匹配到的nstextcheckingresult对象的range */- (nsrange)rangeoffirstmatchinstring:(nsstring *)string options:(nsmatchingoptions)options range:(nsrange)range;3.nsstring //- (nsrange)rangeofstring:(nsstring *)searchstring options:(nsstringcompareoptions)mask;//- (nsrange)rangeofstring:(nsstring *)searchstring options:(nsstringcompareoptions)mask range:(nsrange)searchrange;//匹配文本-(void)matchin{ nsstring *searchtext = @"rangeof77str88ing"; //只能匹配一次 nsrange range = [searchtext rangeofstring:@"[0-9]+" options:nsregularexpressionsearch]; //拿到匹配结果 if (range.location != nsnotfound) { nsstring * searchstring= [searchtext substringwithrange:range]; nslog(@"range.location = %lu range.length = %lu", (unsigned long)range.location,(unsigned long)range.length); nslog(@"string = %@",searchstring); }else{ nslog(@"没有匹配"); }} 4、正则表达式示例代码 
nsstring *summarystring = [nsstring stringwithformat:@"对%@题 错%@题 | 任务正确率%@ | 作业平均正确率%@", questionright, questionwrong, questionrate, taskrate];
nsmutableattributedstring *summaryattributstring = [[nsmutableattributedstring alloc] initwithstring:summarystring];
// 正则匹配,匹配数字和百分号
nsstring *reg = @"[0-9]+|%";
nserror *error = nil;
nsregularexpression *regex = [[nsregularexpression alloc] initwithpattern:reg options:nsregularexpressioncaseinsensitive error:&error];
nsarray *array = [regex matchesinstring:summarystring options:0 range:nsmakerange(0, summarystring.length)];
if (array.count) {
for (int i = 0; i < array.count; i++) {
nstextcheckingresult *result = array[i];
nsrange range = result.range;
[summaryattributstring addattribute:nsforegroundcolorattributename value:[uicolor colorwithhexstring:@"#e71419"] range:range];
}
}
self.summarylabel.attributedtext = summaryattributstring;

5.谓词

//验证是否存在-(bool)validateregular:(nsstring * )regular matchtext:(nsstring *)text;{ 
//正则表达式格式 
//nsstring* regular=@"^1[0-9]{6}$"; 
//创建谓词 
nspredicate *numberpre = [nspredicate predicatewithformat:@"self matches %@",regular]; 
//匹配字符串,若能匹配返回yes,否则返回no; 
bool ismatch = [numberpre evaluatewithobject:text]; 
return ismatch;}

以上所述是小编给大家介绍的ios正则表达式,希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网