2012-08-09 51 views
0

我是新來iPhone.I有一個小疑問正則表達式,目前我在我的項目,是如何忽略空格的正則表達式

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

[用正則表達式解析HTML/XML將永遠不會結束](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags)。考慮使用HTML或XML解析器來提取該屬性。 – 2012-08-09 08:23:54

+0

有一點需要注意。如果網頁的末尾有空格的網址。瀏覽器將爲url中的每個空間包含%20或+。例如kjv/38_Zec.zip ++++++++將是您的示例中最後一個的URL,它是URL的UTF8編碼版本 – 2012-08-09 19:56:48

回答

1

一種方法是做一個字符串用空字符串替換所有的白色空間,或者使用帶函數在該字符串上刪除所有尾隨空格。請參閱String replacement in Objective-C

如果您不想這樣做,請在正則表達式中使用空格匹配一個或多個空格。

\s包括\n(ewline) \r(eturn) \t(tab) \v(ertical tab) \f(orm feed) and space。如果你只想要空間使用""這實際上是一個空白區域。

1

可以匹配你提供下面的正則表達式的例子...

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

我加入

1修改您正則表達式)+(1匹配或多個前面的字符)來捕獲之前的全名.zip, 2)\。以防止它匹配所有字符,3)\ s *匹配(跳過你的情況)零個或多個空格。

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改變任何東西。

0

我通常使用組收集我想要的一件事情。但是你需要知道的羣體是如何工作的。

可惜你不能命名他們,但這樣想。

組使用遇到的()的數字索引。

0是整場比賽。

1是第一組()

2是所述第二組的()等。

如果你有一個這樣的組。您可能有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」