【发布时间】:2010-11-15 13:33:09
【问题描述】:
我得到了一个类似“stackoverflow.html”的字符串,并且在正则表达式“stack(.).html”中,我希望在 (.) 中有值。
我只能找到像这样的 NSPredicate:
NSString *string = @"stackoverflow.html";
NSString *expression = @"stack(.*).html";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", expression];
BOOL match = [predicate evaluateWithObject:string]
但是,当我使用 NSRegularExpression 时,这只会告诉我得到了一个匹配项并且不会返回一个字符串:
NSRange range = [string rangeOfString:expression options:NSRegularExpressionSearch|NSCaseInsensitiveSearch];
if (range.location == NSNotFound) return nil;
NSLog (@"%@", [string substringWithRange:(NSRange){range.location, range.length}]);
它将返回总字符串 stackoverflow.html,但我只对 (.*) 中的内容感兴趣。我想恢复“溢出”。在 PHP 中这很容易做到,但是如何在 xCode for iOS 中完成呢?
如果我会这样做,从逻辑上讲:
NSInteger firstPartLength = 5;
NSInteger secondPartLength = 5;
NSLog (@"%@", [string substringWithRange:(NSRange){range.location + firstPartLength, range.length - (firstPartLength + secondPartLength)}]
它给了我属性结果“溢出”。但问题是在很多情况下我不知道第一部分或第二部分的长度。那么有没有办法获得应该在 (.*) 中的值?
或者我必须通过找到 (.) 的位置并从那里计算第一部分和第二部分来决定选择最丑陋的方法吗?但是在正则表达式中,您可能也有 ([a-z]) 但是使用另一个正则表达式获取 () 之间值的位置然后使用它来计算左右部分的丑陋方式?如果我有更多会发生什么?像“A (.) 应该找到 (.*) 的答案。”我想要一个数组作为结果,其中值 [0] A 之后的值和 [1] to 之后的值。
我希望我的问题很清楚。
提前致谢,
【问题讨论】: