NSRegularExpression无法获得确切的文本

时间:2012-11-15 20:41:33

标签: iphone ios xcode ipad xcode4.5

我有一个字符串:

<book>MyBook</book><value>myValue</value>

现在我想从这个字符串中获取文本“myValue”。我想使用NSRegularExpression来做到这一点。我试过这个:

 NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(<book>MyBook</book>\\s*<value>).*?(</value>)"
                                                                          options:NSRegularExpressionCaseInsensitive
                                                                            error:&error];
    NSArray *textArray = [regex matchesInString:myData options:0 range:NSMakeRange(0, [myData length])];

    NSTextCheckingResult * result = [rege firstMatchInString:myData
                                                           options:0
                                                             range:NSMakeRange(0, [myData length])];

结果是:

<book>MyBook</book><value>myValue</value>

所以我得到了整个字符串,但我只想要“myValue”。我怎样才能做到这一点?我在这里缺少什么?

提前致谢!

1 个答案:

答案 0 :(得分:0)

这是因为您编写了一个与整个字符串匹配的正则表达式。我认为编写一个只与字符串的myValue部分匹配的正则表达式太复杂而无法解决(因为你有MyBook字符串可能与myValue所做的任何事情相匹配)。

我建议不要使用正则表达式,因为它们不适合您在此处描述的用途。如果您不想使用任何XML反序列化,则可以使用NSScanner或任何NSString类方法,这将产生更简单,更容易维护的代码。

例如,使用NSScanner和其他一些方法:

NSString *stringToBeScanned = @"<book>MyBook</book><value>myValue</value>";
NSString *myValue;

NSScanner *scanner = [NSScanner scannerWithString:stringToBeScanned];
[scanner scanUpToString:@"<value>" intoString:nil];
// After the above, we've got "<value>myValue</value>" left to scan

[scanner scanUpToString:@"</value>" intoString:&myValue];
// We ended up with a "<value>myValue" type of a string

// This will trim the remaining of the string we don't need
myValue = [myValue stringByReplacingOccurrencesOfString:@"<value>" withString:@""];

以上内容可能写得更好,我可能犯了一两个错误,但是原则应该有效。

相关问题