谓词与正则表达式(OC)

发布时间:2026/7/19 3:55:30
谓词与正则表达式(OC) 谓词与正则表达式文章目录谓词与正则表达式一、谓词二、正则表达式三、示例邮箱格式判断一、谓词什么是谓词谓词相当于一个过滤器定义一个判断标准将符合标准的对象保留下来常用谓词语法比较类运算符意思示例/等于age 18!/不等于age ! 20大于score 60小于price 100大于等于age 18小于等于count 10逻辑运算类运算符含义示例AND/且两个条件都满足age 18 AND score 60OR/ 或满足一个即可name 张三 OR name 李四NOT/!非取反NOT (age 18)范围类运算符含义示例IN在指定集合内name IN {张三,李四,王五}BETWEEN在两个值之间闭区间age BETWEEN {18, 30}字符串匹配运算运算符含义补充说明BEGINSWITH以指定内容开头加[c]不区分大小写BEGINSWITH[c]ENDSWITH以指定内容结尾加[d]不区分重音符号CONTAINS包含指定内容例name CONTAINS 张LIKE通配符匹配*代表任意长度字符?代表单个字符MATCHES正则表达式匹配后文详细讲解创建谓词字符串NSPredicate*pred[NSPredicate predicateWithFormat:age % AND name %,age,name];BlockNSPredicate*pred[NSPredicate predicateWithBlock:^BOOL(id obj,NSDictionary*bindings){// 在这里写判断逻辑返回 YES 表示符合条件returnYES/NO;}];示例NSArray*people[...];NSPredicate*pred[NSPredicate predicateWithBlock:^BOOL(Person*person,NSDictionary*bindings){// 年龄是偶数并且名字长度大于1return(person.age%20)(person.name.length1);}];NSArray*result[people filteredArrayUsingPredicate:pred];布尔值// 永远返回 YES所有对象都符合条件NSPredicate*truePred[NSPredicate predicateWithValue:YES];// 永远返回 NO所有对象都不符合条件NSPredicate*falsePred[NSPredicate predicateWithValue:NO];二、正则表达式什么是正则表达式正则表达式是一套通用的字符串匹配规则用特殊符号组合成规则语法锚点符号含义^匹配字符串开头$匹配字符串结尾元字符符号含义.匹配任意单个字符换行符除外\d匹配任意数字0-9\D匹配任意非数字\w匹配字母、数字、下划线\W匹配非字母数字下划线\s匹配空白字符空格、制表符、换行等\S匹配非空白字符量词符号含义*前面的字符出现0 次或多次前面的字符出现1 次或多次?前面的字符出现0 次或 1 次{n}前面的字符恰好出现 n 次{n,}前面的字符至少出现 n 次{n,m}前面的字符出现 n~m 次符号含义[abc]匹配 a、b、c 中的任意一个[a-z]匹配 a 到 z 的任意小写字母[^abc]匹配除了 a、b、c 之外的字符\u4e00-\u9fa5汉字范围贪婪与懒惰对于a123b456b贪婪a.*b与懒惰a.*?b贪婪先吃掉整个字符串再从右往左吐出字符直到匹配成功结果就是a123b456b懒惰从当前位置开始每次只多吃一个字符够了就停结果a123b三、示例邮箱格式判断NSString*emailtest_123163.com;NSString*regex[A-Za-z0-9._%-][A-Za-z0-9.-]\\.[A-Za-z]{2,};NSPredicate*pred[NSPredicate predicateWithFormat:SELF MATCHES %,regex];BOOL isValid[pred evaluateWithObject:email];说明[A-Z0-9a-z]含义邮箱用户名只能是大小写字母 数字不能为空。匹配邮箱格式号[A-Za-z0-9]和第一段规则一样域名主体如 163、qq、gmail只能大小写字母 数字至少 1 位。\\.正则里单独. 匹配任意字符不能用来表示小数点其实是因为在字符串中\也不是真正的\它也是一个转义符,我们需要让它的前面再套一个\让它成为真正的\,也就是\\.作用匹配邮箱里的点比如qq.com中间的.[A-Za-z]{2,}[A-Za-z]只能大小写字母{2,}最少 2 个字符无上限匹配域名后缀com、cn、org、net、top等不能是 1 位后缀