NSpredicate 上的正则表达式未按预期工作
Posted
技术标签:
【中文标题】NSpredicate 上的正则表达式未按预期工作【英文标题】:Regex on NSpredicate not working as expected 【发布时间】:2014-04-08 11:37:52 【问题描述】:实际上,我在尝试将正则表达式用于 NSpredicate 时完全迷失了方向。 我想要的是一个正则表达式,它可以在句子中找到符合条件的所有单词的开头。事实是这样行不通。
这是我的正则表达式:.*\b xxx [\w-]*
(其中 xxx 是我的标准)。
这是代码
NSString* regexString = [NSString stringWithFormat: @".*\\b%@[\\w-]*", search];
request.predicate = [NSPredicate predicateWithFormat:@"adresse matches[cd] %@", regexString];
地址是我的核心数据对象的字符串属性。但由于一些模糊的原因,这是行不通的。有人可以帮我吗?
例如: 城市三明治 67200 斯特拉斯堡
.*\bStra[\w-]*
会找到斯特拉斯堡
但.*\b672[\w-]*
或.*\bSAND[\w-]*
不会产生任何结果。
编辑
我终于放弃了,改写了(adresse BEGINSWITH[c] %@) OR (adresse CONTAINS[c] %@)
语句,其中 %@ 是搜索词。
但是如果有人能解释一下为什么 obj-c 中的简单正则表达式看起来像是在太空中发射火箭,那么这个话题仍然是开放的。奇怪的是,正则表达式确实有效,但它应该是一半,就像没有严格遵守规则一样。我现在真的很困惑。
【问题讨论】:
你好,你的模式对我来说似乎有点奇怪(我对正则表达式很陌生)但为什么你最后有一个-
?你期待你的字符串中有任何-
吗?
事实上,当我在网站上发送正则表达式时,它工作正常。我什至在 Java 代码上编写了 \b[\w] 正则表达式,它运行良好。但在 ios 上,我不知道为什么,这根本不起作用。所以我实际上迷路了,并在开头使用了额外的规则,如 .* 和 * 在结尾,或者正则表达式根本不起作用
我发布了一个 anwser,使用的方法与 java 的方法非常相似;)
【参考方案1】:
我没有使用与您相同的对象,而是使用另一个我更了解并且看起来更像 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);
【讨论】:
OP 似乎想使用NSPredicate
并且还想搜索“Sand”,而不是“SAND”。
是的,我看到了,但我更愿意给出一个有效的答案,即使它不在 NSPredicate
中:) 我对 NSPredicate
不太了解,所以我让其他答案;)
好的,谢谢大家的解决方案。 Clad Clad 和@Akhilrajtr 解决方案都可以正常工作。我不明白在哪里可以找到这些正则表达式的正确文档,因为它们似乎没有遵循相同的规则。但是当我阅读 tuto 时,他们说的好像所有的正则表达式都是完全标准的。
就我个人而言:developer.apple.com/library/ios/documentation/Foundation/… 和 vogella.com/tutorials/JavaRegularExpressions/article.html 是非常好的文档(对于 IOS 第一个链接/Java 第二个链接)【参考方案2】:
尝试将regexString
更改为
NSString* regexString = [NSString stringWithFormat: @".*\\b%@.*", search];
【讨论】:
以上是关于NSpredicate 上的正则表达式未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章