0

私はiPhoneを初めて使用します。正規表現に少し疑問がありますが、現在、私のプロジェクトでは以下の正規表現を使用しています。

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

ウェブサイトのビューソースを検索し、以下のパターンの結果を提供します

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

しかし、ビューソースのリンクの1つは以下のようなものです

href="kjv/38_Zec.zip        "

.zip の後の空白を無視したいのですが、これを知っている人がいる場合はどうすればよいでしょうか。助けてください

4

4 に答える 4

1

1 つの方法は、すべての空白を空の文字列で文字列置換するか、その文字列に対してストリップ関数を使用して末尾のスペースをすべて削除することです。Objective-C の文字列置換を参照してください

それをしたくない場合は、正規表現で空白のパターンを使用して、1 つ以上の空白に一致させます。

\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* を 0 個以上の空白に一致させます (この場合はスキップします)。

于 2012-08-09T07:49:32.250 に答える
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 に答える
0

私は通常、グループを使用して、必要なアイテムを収集します。ただし、グループがどのように機能するかを知る必要があります。

残念ながら名前を付けることはできません。しかし、このように考えてください。

グループは、遭遇した () の番号で索引付けされます。

0 は一致全体です。

1 は () の最初のセットです

2 は () の 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.file.zip」ではなく「my.zip」にします。

于 2012-08-09T19:51:30.380 に答える