我有一个字符串:
<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”。我怎样才能做到这一点?我在这里缺少什么?
提前致谢!
答案 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:@""];
以上内容可能写得更好,我可能犯了一两个错误,但是原则应该有效。