如何检查字符串ios中的多个单词?

时间:2016-02-02 11:55:04

标签: ios objective-c regex

我试图在textview字符串中搜索几个字符串。我试图通过正则表达式找到一些表情符号。我做了,

@"(:D|:))

但这不适用于@"(:D)。它与:D, :), :(, :*配合得很好。为什么以及如何检查addEventListener("click", change, false); addEventListener("mouseleave", normal, false); 等字符串?

2 个答案:

答案 0 :(得分:2)

)是一个特殊字符,您需要使用反斜杠在REGEX模式中将其转义。

正确转义的REGEX模式如下所示:(:D|:\))。但是在Objective-C中,\)是不够的,因为反斜杠本身是一个逃避其他角色的特殊字符。因此模式字符串必须是"双重转义"带有2个反冲:逃脱特殊的逃脱角色。

所以在Objective-C中,你必须使用这种模式:@"(:D|:\\))"

您可以在此处进行测试:https://regex101.com/r/jB1yL8/1

答案 1 :(得分:1)

您可能会注意到Objective C中的特殊正则表达式元字符,如.)([]+?\\$^*{}必须使用双反斜杠转义或放入进入角色类[...]

NSMutableString *searchedString = [NSMutableString stringWithString:@":D and :)"];
NSError* error = nil;

NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"(:D|:\\))" options:0 error:&error];
NSArray* matches = [regex matchesInString:searchedString options:0 range:NSMakeRange(0, [searchedString length])];
for ( NSTextCheckingResult* match in matches )
{
    NSString* matchText = [searchedString substringWithRange:[match range]];
    NSLog(@"match: %@", matchText);
}
return 0;

输出:

2016-02-02 01:47:03.723 prog[2261] match: :D
2016-02-02 01:47:03.723 prog[2261] match: :)

请参阅demo