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

时间:2014-04-08 11:37:53

标签: ios regex core-data nspredicate

我实际上完全没有尝试将正则表达式用于NSpredicate。 我想要的是一个正则表达式,它找到符合条件的句子中所有单词的开头。事实是,这是行不通的。

这是我的正则表达式:.*\b xxx [\w-]*(其中xxx是我的标准)。

这是代码

   NSString* regexString   = [NSString stringWithFormat: @".*\\b%@[\\w-]*", search];
   request.predicate       = [NSPredicate predicateWithFormat:@"adresse matches[cd] %@", regexString];

adress是我的核心数据对象的字符串属性。但由于一些不明原因,这是行不通的。有人能帮助我吗?

例如: CITY SANDWITCH 67200斯特拉斯堡

.*\bStra[\w-]*会找到STRASBOURG

.*\b672[\w-]*.*\bSAND[\w-]*不会产生任何结果。

修改

我终于放弃并写了(adresse BEGINSWITH[c] %@) OR (adresse CONTAINS[c] %@)语句,其中%@是搜索词术语。

但如果有人能解释为什么obj-c中的简单正则表达式似乎就像在太空中发射火箭一样,话题仍然是开放的。奇怪的是正则表达式实际上是有效的,但它应该是应该的一半,就像规则没有严格遵循一样。我现在真的很困惑。

2 个答案:

答案 0 :(得分:1)

尝试将regexString更改为

NSString* regexString   = [NSString stringWithFormat: @".*\\b%@.*", search];

答案 1 :(得分:1)

我没有#39;使用与你相同的对象,而是另一个我理解的更多,看起来更像Java的一个;)

NSString* string = @"CITY SANDWITCH 67200 STRASBOURG";
NSString* search = @"SAND"; // work also with 672 or STRAS
NSString* regexString  = [NSString stringWithFormat: @".*\\b(%@[\\w]*)[\\s*\\w*]*", search];
NSError  *error  = NULL;

NSRegularExpression *regex = [NSRegularExpression
                              regularExpressionWithPattern:regexString
                              options:0
                              error:&error];

NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"$1"];

NSLog(@"-->%@", modifiedString);