Shu*_*Ali 0 regex objective-c ios
我有
NSString *str = @"<0x112233><0x112233><0x112233>0a";
Run Code Online (Sandbox Code Playgroud)
我希望这些数据保存在nsarray中
nsarray : { 0x112233 0x112233 0x112233 }
Run Code Online (Sandbox Code Playgroud)
仅保存包含在"<>"中的数据并忽略所有其他数据.
我试过像这样的正则表达式
NSString *str = @"<0x112233><0x112233><0x112233>0a";
NSError *error2;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<(.*)>"
options:NSRegularExpressionCaseInsensitive
error:&error2];
if (error2)
{
NSLog(@"Error %@", [error2 description]);
}
NSArray *payloadRanges=[regex matchesInString:str options:0 range:NSMakeRange(0, [str length])];
NSLog(@"data %@",payloadRanges);
Run Code Online (Sandbox Code Playgroud)
但我给了我这个输出:
data (
"<NSSimpleRegularExpressionCheckingResult: 0x1ddc5e30>{0, 30}{<NSRegularExpression: 0x1f078710> <(.*)> 0x1}"
)
Run Code Online (Sandbox Code Playgroud)
(正如Pat Teen在评论中所说),你的模式是贪婪的,这意味着第一场比赛尽可能多,这就是整个弦乐.
您可以通过改变模式修复@"<(.*)>"到@"<(.*?)>".
然后payloadRanges是三个NSTextCheckingResult对象的数组:
(
"<NSSimpleRegularExpressionCheckingResult: 0x10010af40>{0, 10}{<NSRegularExpression: 0x100108960> <(.*?)> 0x1}",
"<NSSimpleRegularExpressionCheckingResult: 0x10010c210>{10, 10}{<NSRegularExpression: 0x100108960> <(.*?)> 0x1}",
"<NSSimpleRegularExpressionCheckingResult: 0x10010c250>{20, 10}{<NSRegularExpression: 0x100108960> <(.*?)> 0x1}"
)
Run Code Online (Sandbox Code Playgroud)
现在,您必须(...)从每个结果中提取与该组匹配的子字符串:
NSMutableArray *data = [NSMutableArray array];
for (NSTextCheckingResult *result in payloadRanges) {
[data addObject:[str substringWithRange:[result rangeAtIndex:1]]];
}
NSLog(@"data %@",data);
Run Code Online (Sandbox Code Playgroud)
输出:
data (
0x112233,
0x112233,
0x112233
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
786 次 |
| 最近记录: |