【问题标题】:NSRegularExpression - how to match text that may have parentheses, brackets, etcNSRegularExpression - 如何匹配可能有括号、方括号等的文本
【发布时间】:2014-06-19 09:56:50
【问题描述】:

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

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]";

【问题讨论】:

标签: ios regex nsregularexpression


【解决方案1】:

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

  • 用反斜杠转义它们,或者
  • 将它们括在一对方括号中。

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

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

方括号方法也可以在这里使用:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 2012-02-16
    • 1970-01-01
    • 2016-08-24
    • 2018-03-06
    • 1970-01-01
    相关资源
    最近更新 更多