字符串匹配objective-c

Posted

技术标签:

【中文标题】字符串匹配objective-c【英文标题】:String matching objective-c 【发布时间】:2011-05-28 13:31:04 【问题描述】:

我需要这样匹配我的字符串:*myString* 其中* 表示任何子字符串。 我应该使用哪种方法?

你能帮帮我吗?

【问题讨论】:

@Mitch Wheat,这是“我应该使用哪种方法?” “你能帮帮我吗?”可能是一种修辞,虽然我猜你也可以回答这个问题。 【参考方案1】:

如果您需要更高级的东西,请尝试https://github.com/dblock/objc-ngram。

【讨论】:

【参考方案2】:

您无法使用 *(通配符)进行实际搜索,但您通常可以执行等效的操作:

相当于搜索theTerm*

if ([theString hasPrefix:@"theTerm"]) 

相当于搜索*theTerm

if ([theString hasSuffix:@"theTerm"]) 

或者,使用下图NSString上的类别,下面相当于搜索*theTerm*

if ([theString containsString:@"theTerm"]) 

类别只是我们添加到类中的一种新方法(如函数)。我写了以下一个,因为通常认为一个字符串包含另一个字符串比处理NSRanges 更有意义。

// category on NSString
@interface NSString (MDSearchAdditions)
- (BOOL)containsString:(NSString *)aString;
@end

@implementation NSString (MDSearchAdditions)

- (BOOL)containsString:(NSString *)aString 
  return [self rangeOfString:aString].location != NSNotFound;


@end

【讨论】:

对于 containsString 你可以做return [self rangeOfString:aString].location != NSNotFound;【参考方案3】:

如果是 iPhone OS 3.2 或更高版本,请使用 NSRegularExpressionSearch。

NSString *regEx = [NSString stringWithFormat:@".*%@.*", yourSearchString];
NSRange range = [stringToSearch rangeOfString:regEx options:NSRegularExpressionSearch];
if (range.location != NSNotFound) 


【讨论】:

我尝试使用您的代码但它不起作用,但如果我以这种方式使用: NSRange range = [@"hello pippo" rangeOfString:@".*pi.*" 选项: NSRegularExpressionSearch];这行得通!!为什么?特别是如果我使用正则表达式来 rangeOfString id 不起作用!?!?!?! 我注意到如果 textView.text 只是一个单词,它不起作用!! @user536926 抱歉现在修复。

以上是关于字符串匹配objective-c的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C - NSInteger转换NSString

Objective-C,为啥这些 NSArrays 不匹配?

匹配来自 Objective-C 协议实例的 Swift 协议

如何使 Java 和 Objective-C (iPhone) 之间的 AES 加密相同?

IOS / Objective-C:核心数据NSPredicate使用IN不返回所有匹配

算法基础 - 朴素模式匹配算法、KMP模式匹配算法