如何忽略正则表达式中的空格

时间:2012-08-09 07:45:49

标签: iphone ios

我是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之后的空格 如果有任何人知道这有可能请帮帮我

4 个答案:

答案 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”