3

需要分隔一个字符串 on&但不是 on &

有没有一种更优雅的方式来编写代码,而不是先替换它然后将它分开&?像这样...

query = [query stringByReplacingOccurrencesOfString:@"&" withString:@"~~~"];
NSArray * kvpairs = [query componentsSeparatedByString:@"&"];

NSMutableArray *mArr = [[NSMutableArray alloc] init];
for (NSString *kvp in kvpairs) {
    [mArr addObject:[kvp stringByReplacingOccurrencesOfString:@"~~~" withString:@"&"]];
}
kvpairs = [NSArray arrayWithArray:mArr];
[mArr release];
4

3 回答 3

3

您可以使用来枚举匹配但不NSRegularExpression匹配的正则表达式上的字符串,例如:. 这将比您当前的方法更麻烦但更准确,因为它可以在不修改原始字符串的情况下工作并且不依赖于令牌值。&&@"&(?!amp;)"

如果你控制了这个方法的输入,并且可以保证~~~不会正常出现,那么使用~~~. 但是,如果您控制输入,那么您应该尝试在不修改的情况下解析字符串。

于 2012-04-30T21:11:08.813 回答
1

这并没有什么问题,只要您 100% 确定该字符串~~~不会出现在您的查询中。

如果不是,我的下一步将是实现一种将字符串解析为数组的方法。在这种方法中,您可以找到每个 &,然后检查它是否跟在 amp; 后面。如果是,请继续下一个,如果不是,请剪断那里的绳子并重复。

于 2012-04-30T20:24:02.070 回答
0

HTML 实体和引用确实不是在 URL 中闲逛的好东西。除非有很好的理由必须使用 HTML 实体,否则我建议在 URL 中使用 '%26' 对 & 符号进行编码。

话虽如此,如果 '&' 不是唯一的 HTML 实体或引用,您将遇到问题,因此除非您绝对确定 '&' 是唯一的,否则您将需要更强大的解决方案。

于 2012-04-30T21:26:59.850 回答