iOS 正则表达式详解
程序员文章站
2023-12-13 18:50:16
一、系统自带正则表达式用法
除了正则可以用,还有nsscanner这个类可以达到某些相同的效果
1、创建正则表达式对象
nsstring * re...
一、系统自带正则表达式用法
除了正则可以用,还有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正则表达式,希望对大家有所帮助