【问题标题】:Search through NSString using Regular Expression使用正则表达式搜索 NSString
【发布时间】:2011-05-20 05:22:41
【问题描述】:

如何使用正则表达式搜索/枚举NSString

正则表达式,例如:/(NS|UI)+(\w+)/g

【问题讨论】:

    标签: objective-c cocoa nsstring


    【解决方案1】:

    如果你只是想匹配字符串中的某些模式,有一个简单的方法可以用NSString 测试正则表达式:

    NSString *string = @"Telecommunication";
    
    if ([string rangeOfString:@"comm" options:NSRegularExpressionSearch].location != NSNotFound)
    
        NSLog(@"Got it");
    
    else
    
        NSLog(@"No luck");
    

    注意,通常你会想要...

    if ([string rangeOfString:@"cOMm"
      options:NSRegularExpressionSearch|NSCaseInsensitiveSearch].location
      != NSNotFound)
         NSLog(@"yes match");
    

    在 Swift 中,你可以编写这样的代码 ...

    斯威夫特 2

        let string = "Telecommunication"
    
        if string.rangeOfString("cOMm", options: (NSStringCompareOptions.RegularExpressionSearch | NSStringCompareOptions.CaseInsensitiveSearch)) != nil {
            print("Got it")
        } else {
            print("No luck")
        }
    

    斯威夫特 4

        let string = "Telecommunication"
    
        if string.range(of: "cOMm", options: [.regularExpression, caseInsensitive]) != nil {
            print("Got it")
        } else {
            print("No luck")
        }
    

    请注意,Swift 2 的 rangeOfString(_:,options:) 和 Swift 4 的 range(of:options:) 返回 Range<String.Index>?,如果搜索失败则返回 nil

    【讨论】:

    • 年度最佳答案 :)
    • NSRegularExpressionSearch 不在记录的选项中,您确定可以这样做吗?
    • 其实你仍然可以在 Objective-C 代码中使用这个代码 sn-p 但在 Swift 中它应该是 NSStringCompareOptions.RegularExpressionSearch
    【解决方案2】:

    你需要使用NSRegularExpression类。

    文档中启发的示例:

    NSString *yourString = @"";
    NSError *error = NULL;
    NSRegularExpression *regex = [NSRegularExpression         
        regularExpressionWithPattern:@"(NS|UI)+(\\w+)"
        options:NSRegularExpressionCaseInsensitive
        error:&error];
    [regex enumerateMatchesInString:yourString options:0 range:NSMakeRange(0, [yourString length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){
        // your code to handle matches here
    }];
    

    【讨论】:

    • 这是我正在使用的代码,包括字符串gist.github.com/728216。但是它不起作用,并且不会调用 NSLog
    • 我检查了(NS|UI)+(\w+)regextester.com 上的有效正则表达式。
    • 你需要双重转义这些反斜杠。
    • 你的意思是\w?那是一个匹配单词字符的元字符。
    • Joshua - \w 确实是正确的元字符,但反斜杠字符在普通字符串中用作转义字符。在将\w 传递给RegEx 对象之前,编译器的字符串解析器会将其更改为简单的w。运行 NSLog 亲自查看。因此正确的符号是\\w,因为编译器会将'\\' 转换为'\'。这种约定在许多语言中都有体现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 2015-02-12
    • 2021-08-06
    • 2012-03-10
    相关资源
    最近更新 更多