NSPredicate 和正则表达式

Posted

技术标签:

【中文标题】NSPredicate 和正则表达式【英文标题】:NSPredicate and Regex 【发布时间】:2010-03-16 23:18:42 【问题描述】:

有人可以帮助我将 Regex 与 NSPredicate 一起使用吗?

NSString *regex = @"(?:[A-Za-z0-9])";
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
if ([pred evaluateWithObject:mystring])

  //do something

使用 mystring 测试上述内容 - qstring123 似乎不起作用。我期待它进入 if 条件,因为它应该与正则表达式匹配。

此外,我需要一个允许逗号和空格的字母数字正则表达式。

这行得通吗?

@"(?:[A-Za-z0-9])*(?:,[A-sa-z0-9)*(?:\s[A-sa-s0-9])"

请帮忙。

【问题讨论】:

【参考方案1】:

根据我的实验,它会尝试将正则表达式与整个字符串进行匹配,并且不会在字符串内部进行匹配。

因此,正则表达式 [a-zA-Z0-9]+ 有效,但 [a-zA-Z0-9] 无效。

考虑到这一点,您可能需要重新设计逗号匹配谓词,或使用功能更全面的正则表达式解决方案,例如令人惊叹的 RegexKit and RegexKitLite。

【讨论】:

duh' 我最后错过了 +。我实际上使用了 * 并且它有效。有什么区别? * 匹配 0 次或多次,+ 匹配 1 次或多次。

以上是关于NSPredicate 和正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

iOS之NSPredicate(正则表达式和UIBarController):谓词

正则表达式和NSPredicate

NSPredicate 正则表达式错误

NSPredicate 与正则表达式检查字母数字

NSpredicate 上的正则表达式未按预期工作

NSPredicate 正则表达式不起作用