我实际上完全没有尝试将正则表达式用于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中的简单正则表达式似乎就像在太空中发射火箭一样,话题仍然是开放的。奇怪的是正则表达式实际上是有效的,但它应该是应该的一半,就像规则没有严格遵循一样。我现在真的很困惑。
答案 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);