NSPredicate 和简单的正则表达式问题

Posted

技术标签:

【中文标题】NSPredicate 和简单的正则表达式问题【英文标题】:NSPredicate and simple Regular Expression problem 【发布时间】:2009-10-17 17:17:03 【问题描述】:

我在使用简单的 NSPredicates 和正则表达式时遇到问题:

NSString *mystring = @"file://questions/123456789/desc-text-here";
NSString *regex = @"file://questions+";

NSPredicate *regextest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
BOOL isMatch = [regextest evaluateWithObject:mystring];

在上面的示例中,isMatch 始终为 false/NO。

我错过了什么?我似乎找不到匹配 file://questions 的正则表达式。

【问题讨论】:

【参考方案1】:

NSPredicates 似乎尝试匹配整个字符串,而不仅仅是一个子字符串。您的尾随 + 仅表示匹配一个或多个 's' 字符。您需要允许匹配任何尾随字符。这有效:regex = @"file://questions.*"

【讨论】:

【参考方案2】:

如果你只是想测试字符串是否存在:试试这个

NSString *myString = @"file://questions/123456789/desc-text-here";
NSString *searchString = @"file://questions";

NSRange resultRange = [myString rangeWithString:searchString];
BOOL result = resultRange.location != NSNotFound;

交替,使用谓词

NSString *myString = @"file://questions/123456789/desc-text-here";
NSString *searchString = @"file://questions";

NSPredicate *testPredicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH %@", searchString];

BOOL result = [testPredicate evaluateWithObject:myString];

我相信文档指出使用谓词是检查子字符串是否存在的方法。

【讨论】:

hasPrefix: 用于开头的情况。并且这两个(和结尾)都有谓词运算符,如果它们不需要正则表达式,可能会更喜欢。 developer.apple.com/mac/library/documentation/Cocoa/Conceptual/…

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

NSPredicate 正则表达式错误

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

正则表达式和NSPredicate

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

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

如何使用正则表达式搜索忽略 NSPredicate 的某些字符?