使用Objective C中的正则表达式捕获一些数据之前和之后的字符串

时间:2012-01-21 22:43:13

标签: objective-c regex xcode4 nsregularexpression

我对正则表达式相对较新,需要一些建议。

目标是将以下格式的数据获取到数组中:

  • 值= 777
  • 值= 888

根据这些数据:“value =!@#777!@#value = @# 888 *

这是我的代码(目标C):

NSString *aTestString = @"value=!@#777!@#value=@#$**888***";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"value=(?=[^\d])(\d)" options:0 error:&anError];

所以我的问题是:

1)正则表达式引擎能捕获那样拆分的数据吗?检索“value =”删除中间的垃圾数据,然后将其编号为“777”等?

2)如果可以这样做,那么我的正则表达式是否有效?值=(?= [^ \ d])(\ d)

2 个答案:

答案 0 :(得分:3)

前瞻(?=)在这里是错误的,你没有正确地转义\d(它变为\\d),最后但并非最不重要的是你遗漏了量词{{1 }(0次或更多次)和*(1次或更多次):

+

编辑:这是一个更精致的模式。它在NSString *aTestString = @"value=!@#777!@#value=@#$**888***"; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"value=[^\\d]*(\\d+)" options:0 error:NULL ]; [regex enumerateMatchesInString:aTestString options:0 range:NSMakeRange(0, [aTestString length]) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { NSLog(@"Value: %@", [aTestString substringWithRange:[result rangeAtIndex:1]]); } ]; 之前捕获一个单词,然后丢弃非数字并随后捕获数字。

=

答案 1 :(得分:0)

正则表达式是与给定模式匹配的表达式。正则表达式可以使用类似“value = [#@!%^&] [0-9] ”的表达式匹配,例如“value =!@#777”之类的字符串,其中说匹配文字“value =”,然后匹配由字符#,@,!,%,^和&组成的任何字符串,最后是由数字组成的任何字符串。但是你不能单独使用一个正则表达式来获得你想要的字符串部分,即“value = 777”。

因此,一种解决方案是创建一个表达式来识别字符串,例如“value =!@#777”,然后对该字符串进行一些进一步处理以删除有问题的字符。

我认为你最好使用NSScanner扫描数据并提取你想要的部分。例如,您可以使用-scanString:intoString:获取“value =”部分,然后使用-scanCharactersFromSet:intoString:删除您不需要的部分,然后再次调用该方法以获取数字集合。