0

我是 iPhone 的新手。我对正则表达式有一点疑问,目前我在我的项目中使用正则表达式下面的一个是

NSRegularExpression *regularExpression = 
   [NSRegularExpression regularExpressionWithPattern:@"href=\"(.*).zip\"" 
                                             options:NSRegularExpressionCaseInsensitive 
                                               error:&error];

它搜索网站视图源并给出以下模式的结果

href="kjv/36_Zep.zip"
href="kjv/37_Hag.zip"

但查看源中的链接之一如下所示

href="kjv/38_Zec.zip        "

我想忽略 .zip 之后的空格,如果有人知道这怎么可能,请帮助我

4

4 回答 4

1

一种方法是用空字符串替换所有空格,或者在该字符串上使用 strip 函数来删除所有尾随空格。参考Objective-C 中的字符串替换

如果您不想这样做,请在正则表达式中使用空格模式来匹配一个或多个空格。

\s包括\n(ewline) \r(eturn) \t(tab) \v(ertical tab) \f(orm feed) and space. 如果您只想使用""实际上是空白的空间。

于 2012-08-09T07:49:23.507 回答
1

您可以将您提供的示例与以下正则表达式相匹配...

@"href=\"(.+)\.zip\s*\""

我通过添加修改了您的正则表达式

1) +(匹配 1 个或多个前面的字符)捕获 .zip 之前的整个名称,2) \ 到 . 为了防止它匹配所有字符,3) \s* 匹配(在你的情况下跳过)零个或多个空格。

于 2012-08-09T07:49:32.250 回答
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,我在这里使用的匹配会搞砸。

例如 href="my.zip.file.zip" 会将匹配组 2 设为 "my.zip" 而不是 "my.zip.file.zip"

于 2012-08-09T19:51:30.380 回答
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 中的任何内容。

于 2012-08-09T08:17:28.447 回答