正则表达式和谓词

本文介绍了正则表达式及其在Objective-C中的使用,包括如何创建和使用NSPredicate来筛选数组中的特定元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正则表达式

  • 需要匹配的字符串 str
  • 匹配规则 pattern
  • 正则表达式
NSRegularExpression *regularExpression = [NSRegularExpression  regularExpressionWithPattern:pattern options:0 error:nil];
  • 匹配结果
NSArray *resultarray= [regularExpression matchesInString:str options:NSMatchingReportCompletion range:NSMakeRange(0, str.length)];

谓词

  • 作用: 判断条件表达式的求值返回真或假的过程
  • 使用步骤:

    • 定义NSPredicate对象并制定条件
    • 调用谓词的evaluateWithObject方法判断指定条件是否满足
  • 条件指令:

    • BEGANWITH 以指定字符开始
    • ENDSWITH 以指定字符结束
    • CONTAINS 包含指定字符
  • 提示:
    • 为此中的匹配指令关键字通常使用大写字母
    • 谓词中可以使用格式字符串
    • 如果通过key path指定匹配条件, 需要使用%K

应用1
创建一个数组, 里面有50个随机数字
目标: 在数组中, 找到包含数字’8’的数字

// self表示数组中的每一项
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self CONTAINS '8'"];

NSArray *result = [arrayM filteredArrayUsingPredicate: predicate];

NSLog(@"%@", result);

这样获取的结果都是包含数字8的元素

应用2
在Person数组中有50个Person对象(三个属性: name/title/age),
需求: 搜索数组中名字有’lisi’ & title 是’boss’

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name CONTAINS 'lisi' AND title CONTAINS 'boss'"];

 NSArray *result = [arrayM filteredArrayUsingPredicate: predicate];

NSLog(@"%@", result);

需求: 搜索数组中名字有’lisi’ & title 是’boss’ 或者年龄小于30的人

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(name CONTAINS 'lisi' AND title CONTAINS 'boss') OR age < 30"];

 NSArray *result = [arrayM filteredArrayUsingPredicate: predicate];

NSLog(@"%@", result);

注意:

1> 如果利用参数传递字符串, 不需要”

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name CONTAINS 'lisi' AND title CONTAINS %@", @"xiami"];

2> 如果要传递属性名(KVC), 格式字符串中, 需要使用%K

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K CONTAINS 'lisi' AND title CONTAINS %@", @"name", @"xiami"];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值