【问题标题】:How to check if string matches a regular expression in objective-c?如何检查字符串是否与objective-c中的正则表达式匹配?
【发布时间】:2011-08-12 05:30:47
【问题描述】:

由于 Cocoa 不支持常规表达式,我发现 RegexKitLite 非常有用。 但是所有示例都提取匹配的字符串。

我只是想测试一个字符串是否匹配一个正则表达式并得到一个是或否。

我该怎么做?

【问题讨论】:

  • 正则表达式'Cocoa 不支持'?自 iOS 4.0 发布以来,NSRegularExpression 一直是该框架的一部分,在提出这个问题之前将近一年,并且在引入 NSRegularExpression 之前,显然已经有使用正则表达式的方法,正如在中所提到的,例如,Vaz 的回答。

标签: objective-c regexkitlite


【解决方案1】:

比使用NSPredicate 更简单的另一种方法是 NSString 的 -rangeOfString:options: 方法的一个几乎未记录的选项:

NSRange range = [string rangeOfString:@"^\\w+$" options:NSRegularExpressionSearch];
BOOL matches = range.location != NSNotFound;

我说“几乎没有文档”,因为该方法本身没有列出可用的选项,但是如果您碰巧在搜索和比较运算符的文档中找到NSRegularExpressionSearch,您会发现它是一个有效的选项对于自 OS X 10.7 和 iOS 3.2 以来的 -rangeOfString... 方法。

【讨论】:

    【解决方案2】:

    使用-isMatchedByRegex: 方法。

    if([someString isMatchedByRegex:@"^[0-9a-fA-F]+:"] == YES) { NSLog(@"Matched!\n"); }
    

    【讨论】:

    • NB 不是可可的一部分。这里的答案很简单.. stackoverflow.com/questions/4353834/…
    • 嗯,@Vladimir 的回答对我来说似乎更简单。
    • == YES 是多余的
    • 使用这个库来执行 Cocoa 中包含的一个非常简单的操作并不是一个好主意。
    【解决方案3】:
    【解决方案4】:

    我为此使用了 NSPredicate:

    NSString *someRegexp = ...; 
    NSPredicate *myTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", someRegexp]; 
    
    if ([myTest evaluateWithObject: testString]){
    //Matches
    }
    

    【讨论】:

    • 谢谢,我可以为 someRegexp 使用默认的正则表达式语法吗?
    • 我认为是的,例如我将它用于简单的电子邮件验证: NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za- z]{2,4}";
    • @Vladimir 认为电子邮件正则表达式是不够的。电子邮件地址可能包含 unicode,顶级域的长度不是 2 到 4 个字符。
    • 它达到了我的目的,我没有来自用户的抱怨 :) 但是你可以很容易地用更好的替换它,因为它不是这个问题的一部分
    猜你喜欢
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多