NSRegularExpression - 如何匹配可能包含括号,括号等的文本

时间:2014-06-19 01:52:29

标签: ios regex nsregularexpression

我的文本可能包含括号,括号,以及具有相同文本的子字符串。如何通过正则表达式使这些文本匹配,但不区分大小写?

NSError* error = nil;
NSString* text = @"Hello (extreme elevation) - some longer string";
NSString* obj = @"hello (extreme elevation)";
NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:obj
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:&error];
NSArray* matches = [regex matchesInString:text
                                  options:0
                                    range:NSMakeRange(0, text.length)];

这与任何东西都不匹配,即使Obj的hello大写,它也不会通过正则表达式匹配,但会通过NSString rangeOfString匹配。我希望能够在这种情况下将obj与文本匹配,以及其他我可能有括号的情况,例如:

NSString* text = @"Hello [extreme elevation]";
NSString* obj = @"hello [extreme elevation]";

1 个答案:

答案 0 :(得分:3)

在正则表达式的上下文中,括号,方括号,星号,加号和其他类似字符称为元字符。为了匹配它们,你需要

  • 使用反斜杠或
  • 逃脱它们
  • 将它们装在一对方括号中。

回想一下,反斜杠也是由Objective-C编译器解释的,所以如果你把表达式放在一个字符串文字中,你需要加倍反斜杠,如下所示:

NSString* obj = @"hello \\(extreme elevation\\)";

方括号方法也适用于此:

NSString* obj = @"hello [(]extreme elevation[)]";

(它适用于除方括号之外的所有元字符,需要通过反斜杠进行转义):

NSString* obj = @"hello \\[extreme elevation\\]";