欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS 正则表达式详解

程序员文章站 2023-12-17 08:39:04
一、系统自带正则表达式用法 除了正则可以用,还有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正则表达式,希望对大家有所帮助

上一篇:

下一篇: