我是iPhone新手。我对正则表达式有一点疑问,目前我在我的项目中使用正则表达式
NSRegularExpression *regularExpression =
[NSRegularExpression regularExpressionWithPattern:@"href=\"(.*).zip\""
options:NSRegularExpressionCaseInsensitive
error:&error];
它搜索网站的viewsource并提供以下格式的结果
href="kjv/36_Zep.zip"
href="kjv/37_Hag.zip"
但是视图源中的一个链接如下所示
href="kjv/38_Zec.zip "
我想忽略.zip之后的空格 如果有任何人知道这有可能请帮帮我
答案 0 :(得分:1)
一种方法是使用空字符串替换所有白色空格,或者对该字符串使用strip函数以删除所有尾随空格。请参阅String replacement in Objective-C
如果您不想这样做,请使用正则表达式中的空白模式匹配一个或多个空格。
\s
包括\n(ewline) \r(eturn) \t(tab) \v(ertical tab) \f(orm feed) and space
。如果您只想要空间使用""
,那实际上是一个空白区域。
答案 1 :(得分:1)
您可以将您提供的示例与以下正则表达式进行匹配...
@"href=\"(.+)\.zip\s*\""
我通过添加
来修改你的正则表达式1)+(匹配前面一个或多个字符)以捕获.zip之前的整个名称, 2)\到。为了防止它匹配所有字符, 3)\ s *匹配(在你的情况下跳过)零个或多个空格。
答案 2 :(得分:0)
假设它给出了一个NSString * test = @“... href =”/ functions?q = KEYWORD \ x26amp ...“并且你想用NSRegularExpression对这个字符串执行动作,你也可以做一个简单的方法调用像这样
NSTextCheckingResult *result = [testRegex firstMatchInString:[test stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] options:0 range:NSMakeRange(0, [test length])];
并且不要更改NSRegularExpression中的任何内容。
答案 3 :(得分:0)
我通常使用群组来收集我想要的项目。但是,您需要了解组的工作方式。
不幸的是你无法命名它们。但是这样想吧。
组使用()遇到的数字编号。
0是整场比赛。
1是第一组()
2是第二组()等等。
如果你有这样的组。
NSString *matchString = @"(href)=\"((.*)[.]zip)\"";
你会有4个小组。
组0是整个字符串,组1是“href”,组2是整个文件名,组3是没有扩展名的文件名。
希望有所帮助。
NSRegularExpression *regularExpression =
[NSRegularExpression regularExpressionWithPattern:@"href=\"(.*[.]zip)[^\"]*\""
options:NSRegularExpressionCaseInsensitive
error:&error];
NSMutableArray *foundMatches = [NSMutableArray array];
[regex enumerateMatchesInString:originalString
options:0
range:NSMakeRange(0, [originalString length])
usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
if (result.numberOfRanges == 2){
[foundMatches addObject:[originalString substringWithRange:[result rangeAtIndex:1]]];
}
}];
如果文件名中有一个不包含扩展名的.zip,那么我在这里使用的匹配会搞砸。
e.g。 href =“my.zip.file.zip”将匹配组2设为“my.zip”而不是“my.zip.file.zip”