日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IOS自带正则表达式NSPredicate的使用

發布時間:2024/9/30 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS自带正则表达式NSPredicate的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先舉一個例子:
匹配9-15個由字母/數字組成的字符串的正則表達式:
? ? NSString * regex = @"^[A-Za-z0-9]{9,15}$";
? ? NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
? ? BOOL isMatch = [pred evaluateWithObject:txtfldPhoneNumber.text];

Cocoa用NSPredicate描述查詢的方式,原理類似于在數據庫中進行查詢

用BETWEEN,IN,BEGINWITH,ENDWITH,CONTAINS,LIKE這些謂詞來構造NSPredicate,必要的時候使用SELF直接對自己進行匹配

[cpp]?view plaincopy
  • //基本的查詢??
  • NSPredicate?*predicate;??
  • predicate?=?[NSPredicate?predicateWithFormat:?@"name?==?'Herbie'"];??
  • ????BOOL?match?=?[predicate?evaluateWithObject:?car];??
  • ????NSLog?(@"%s",?(match)???"YES"?:?"NO");??
  • //在整個cars里面循環比較??
  • ????predicate?=?[NSPredicate?predicateWithFormat:?@"engine.horsepower?>?150"];??
  • ????NSArray?*cars?=?[garage?cars];??
  • ????for?(Car?*car?in?[garage?cars])?{??
  • ????????if?([predicate?evaluateWithObject:?car])?{??
  • ????????????NSLog?(@"%@",?car.name);??
  • ????????}??
  • ????}??
  • //輸出完整的信息??
  • ????predicate?=?[NSPredicate?predicateWithFormat:?@"engine.horsepower?>?150"];??
  • ????NSArray?*results;??
  • ????results?=?[cars?filteredArrayUsingPredicate:?predicate];??
  • ????NSLog?(@"%@",?results);??
  • //含有變量的謂詞??
  • ????NSPredicate?*predicateTemplate?=?[NSPredicate?predicateWithFormat:@"name?==?$NAME"];??
  • ????NSDictionary?*varDict;??
  • ????varDict?=?[NSDictionary?dictionaryWithObjectsAndKeys:??
  • ???????????????@"Herbie",?@"NAME",?nil];??
  • ????predicate?=?[predicateTemplate?predicateWithSubstitutionVariables:?varDict];??
  • ????NSLog(@"SNORGLE:?%@",?predicate);??
  • ????match?=?[predicate?evaluateWithObject:?car];??
  • ??NSLog?(@"%s",?(match)???"YES"?:?"NO");??
  • //注意不能使用$VARIABLE作為路徑名,因為它值代表值??
  • //謂詞字符竄還支持c語言中一些常用的運算符??
  • ?????
  • ????predicate?=?[NSPredicate?predicateWithFormat:??
  • ?????????????????@"(engine.horsepower?>?50)?AND?(engine.horsepower?<?200)"];??
  • ????results?=?[cars?filteredArrayUsingPredicate:?predicate];??
  • ????NSLog?(@"oop?%@",?results);??
  • ?????
  • ????predicate?=?[NSPredicate?predicateWithFormat:?@"name?<?'Newton'"];??
  • ????results?=?[cars?filteredArrayUsingPredicate:?predicate];??
  • ????NSLog?(@"%@",?[results?valueForKey:?@"name"]);??
  • //強大的數組運算符??
  • ????predicate?=?[NSPredicate?predicateWithFormat:??
  • ?????????????????@"engine.horsepower?BETWEEN?{?50,?200?}"];??
  • ????results?=?[cars?filteredArrayUsingPredicate:?predicate];??
  • ????NSLog?(@"%@",?results);??
  • ?????
  • ????NSArray?*betweens?=?[NSArray?arrayWithObjects:??
  • ?????????????????????????[NSNumber?numberWithInt:?50],?[NSNumber?numberWithInt:?200],?nil];??
  • ????predicate?=?[NSPredicate?predicateWithFormat:?@"engine.horsepower?BETWEEN?%@",?betweens];??
  • ????results?=?[cars?filteredArrayUsingPredicate:?predicate];??
  • ????NSLog?(@"%@",?results);??
  • ????predicateTemplate?=?[NSPredicate?predicateWithFormat:?@"engine.horsepower?BETWEEN?$POWERS"];??
  • ????varDict?=?[NSDictionary?dictionaryWithObjectsAndKeys:?betweens,?@"POWERS",?nil];??
  • ????predicate?=?[predicateTemplate?predicateWithSubstitutionVariables:?varDict];??
  • ????results?=?[cars?filteredArrayUsingPredicate:?predicate];??
  • ????NSLog?(@"%@",?results);??
  • //IN運算符??
  • ????predicate?=?[NSPredicate?predicateWithFormat:?@"name?IN?{?'Herbie',?'Snugs',?'Badger',?'Flap'?}"];??
  • ????results?=?[cars?filteredArrayUsingPredicate:?predicate];??
  • ????NSLog?(@"%@",?[results?valueForKey:?@"name"]);??
  • ????predicate?=?[NSPredicate?predicateWithFormat:?@"SELF.name?IN?{?'Herbie',?'Snugs',?'Badger',?'Flap'?}"];??
  • ????results?=?[cars?filteredArrayUsingPredicate:?predicate];??
  • ????NSLog?(@"%@",?[results?valueForKey:?@"name"]);??
  • ?????
  • ????names?=?[cars?valueForKey:?@"name"];??
  • ????predicate?=?[NSPredicate?predicateWithFormat:?@"SELF?IN?{?'Herbie',?'Snugs',?'Badger',?'Flap'?}"];??
  • ????results?=?[names?filteredArrayUsingPredicate:?predicate];//這里限制了SELF的范圍??
  • ????NSLog?(@"%@",?results);??
  • //BEGINSWITH,ENDSWITH,CONTAINS??
  • //附加符號,[c],[d],[cd],c表示不區分大小寫,d表示不區分發音字符,cd表示什么都不區分??
  • ????predicate?=?[NSPredicate?predicateWithFormat:?@"name?BEGINSWITH?'Bad'"];??
  • ????results?=?[cars?filteredArrayUsingPredicate:?predicate];??
  • ????NSLog?(@"%@",?results);??
  • ?????
  • ????predicate?=?[NSPredicate?predicateWithFormat:?@"name?BEGINSWITH?'HERB'"];??
  • ????results?=?[cars?filteredArrayUsingPredicate:?predicate];??
  • ????NSLog?(@"%@",?results);??
  • ?????
  • ????predicate?=?[NSPredicate?predicateWithFormat:?@"name?BEGINSWITH[cd]?'HERB'"];??
  • ????results?=?[cars?filteredArrayUsingPredicate:?predicate];??
  • ????NSLog?(@"%@",?results);??
  • //LIKE運算符(通配符)??
  • ????predicate?=?[NSPredicate?predicateWithFormat:?@"name?LIKE[cd]?'*er*'"];??
  • ????results?=?[cars?filteredArrayUsingPredicate:?predicate];??
  • ????NSLog?(@"%@",?results);??
  • ?????
  • ????predicate?=?[NSPredicate?predicateWithFormat:?@"name?LIKE[cd]?'???er*'"];??
  • ????results?=?[cars?filteredArrayUsingPredicate:?predicate];??
  • ????NSLog?(@"%@",?results); ?

  • NSPredicate用于查詢和過濾

    在SQL中作為查詢條件通常用WHERE,但在COREDATA中作為查詢條件就可以用到NSPredicate.

    NSPredicate 不單可以和COREDATA中的FetchRequest 配合使用。也可以與NSArray配合使用。

    ?

    NSPredicate 中支持的關鍵詞和條件符:

    1、>,<,>=,<=,= 比較運算符。

    如:

    ???? NSPredicate * qcondition= [NSPredicate predicateWithFormat:@"salary >= 10000"];

    2、字符串操作(包含):BEGINSWITH、ENDSWITH、CONTAINS

    如:

    ????????@"employee.name BEGINSWITH[cd] '李'" //姓李的員工

    ???? @"employee.name ENDSWITH[c] '夢'"?? //以夢結束的員工

    ???? @"employee.name CONTAINS[d] '宗'"?? //包含有"宗"字的員工

    注:[c]不區分大小寫[d]不區分發音符號即沒有重音符號[cd]既不區分大小寫,也不區分發音符號。

    ?

    3、范圍:IN?? ,BWTEEN

    如:

    ??? @"salary BWTEEN {5000,10000}"

    ??? @"em_dept IN '開發'"

    ?

    4、自身:SELF,這個只針對字符數組起作用。

    如:

    ???? NSArray * test = =[NSArray arrayWithObjects: @"guangzhou", @"beijing", @"shanghai", nil];

    ???? @"SELF='beijing'"

    ?

    5、通配符:LIKE

    ???? LIKE 使用?表示一個字符,*表示多個字符,也可以與c、d 連用。

    如:

    ???? @"car.name LIKE '?he?'" //四個字符中,中間為he

    ???? @"car.name LIKE '*jp'"?? //以jp結束

    ?

    6、正則表達式:MATCHES

    如:

    NSString *regex = @"^E.+e$";//以E 開頭,以e 結尾的字符。
    NSPredicate *pre= [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    if([pre evaluateWithObject: @"Employee"]){
    NSLog(@"matches YES");

    }else{
    NSLog(@"matches NO");

    }

    ?

    7、邏輯運算符:AND、OR、NOT
    如:

    ????? @"employee.name = 'john' AND employee.age = 28"

    ?

    8、占位符:
    NSPredicate *preTemplate = [NSPredicate predicateWithFormat:@"name==$NAME"];
    NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:
    @"Name1", @"NAME",nil];
    NSPredicate *pre=[preTemplate predicateWithSubstitutionVariables: dic];
    占位符就是字典對象里的key,因此你可以有多個占位符,只要key 不一樣就可以了。

    ?

    對數組過濾:

    如:

    ?NSMutableArray?*carsCopy = [carsmutableCopy];

    ? ? [carsCopyfilterUsingPredicate: predicate];//filterUsingPredicateNSMutableArray構成新數組。

    ? ??NSLog?(@"%@", carsCopy);

    ?? ?

    ? ? predicate = [NSPredicatepredicateWithFormat:@"engine.horsepower > %d",?50];

    ? ? results = [cars?filteredArrayUsingPredicate: predicate];

    ? ??NSLog?(@"%@", results);


    總結

    以上是生活随笔為你收集整理的IOS自带正则表达式NSPredicate的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。