【问题标题】:Extract value from NSString with NSRegularExpression使用 NSRegularExpression 从 NSString 中提取值
【发布时间】:2012-06-23 15:41:50
【问题描述】:

我有以下 NSString:

var param1=8;
var param2=4;
var param3=1;

我需要从中提取参数的值。我使用 NSRegularExpression 但不能让它工作:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"var param1=(.*);\nvar param2=(.*);\nvar param3=(.*)" options:0 error:NULL];
NSTextCheckingResult *match = [regex firstMatchInString:string options:0 range:NSMakeRange(0, [string length])];
NSString *param1= [match rangeAtIndex:1];

【问题讨论】:

  • 我在尝试时遇到了崩溃

标签: ios regex nsregularexpression


【解决方案1】:

虽然标题与答案不相符,但问题NSRegularExpression validate email 提供了一个有用的在线regex checker 的链接。

我的感觉是,您的示例中的正则表达式中的 \n 字符有问题。

我会考虑像@"^var param[123]=\b(\w*)\b;" 这样的表达式,它应该为您提供三个匹配项;您必须使用NSRegularExpression 方法matchesInString 而不是firstMatchInString,但您的循环应该非常简单:

    NSArray* matches = [regex matchesInString:string
                                      options:0
                                        range:NSMakeRange(0, [string length])];
    for (NSTextCheckingResult *match in matches) {
        // per match processing
    }

【讨论】:

    【解决方案2】:

    首先,您将 NSRange 转换为 NSString,最后一行应如下所示:

    NSString *param1= [string substringWithRange:[match rangeAtIndex:1]];
    

    其次,也许你的字符串有问题?它可能在换行符之前有空格等。我已经测试过:

    NSString *string = @"var param1=8;\n"
                        "var param2=4;\n"
                        "var param3=1;";
    

    它工作正常,返回一个“8”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-24
      • 2012-12-23
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      相关资源
      最近更新 更多