6

NSStringから部分文字列を抽出したい。それがどのように可能か。

例:文字列は abcdefwww.google.comabcdefです

出力:www.google.com

メインの文字列では、どのURLが来るかは事前定義されていません。これは、google.comまたはyahoo.comなどです。

したがって、 wwwでwの開始位置を見つけ、 .comでmの最後の位置を見つける必要があります。

だから私の質問は、wwwのwの開始位置と.comのmの位置をどのように見つけることができるかということですので、この部分を抽出します

問題のために編集:

この文字列からwww.mywebsite.co.ukを抽出する方法asdfwww.mywebsite.co.ukasdfajsf

ありがとう

4

4 に答える 4

20

以下のような文字列からの部分文字列

       - (NSString *)extractString:(NSString *)fullString toLookFor:(NSString *)lookFor skipForwardX:(NSInteger)skipForward toStopBefore:(NSString *)stopBefore 
    {

        NSRange firstRange = [fullString rangeOfString:lookFor];
        NSRange secondRange = [[fullString substringFromIndex:firstRange.location + skipForward] rangeOfString:stopBefore];
        NSRange finalRange = NSMakeRange(firstRange.location + skipForward, secondRange.location + [stopBefore length]);

        return [fullString substringWithRange:finalRange];
    }

以下のようにこの方法を使用してください...

NSString *strTemp = [self extractString:@"abcdefwww.google.comabcdef" toLookFor:@"www" skipForwardX:0 toStopBefore:@".com"];
NSLog(@"\n\n Substring ==>> %@",strTemp);

詳細については、次のリンクを参照してください。

help-needed-function-extract-string-string

于 2012-11-16T11:39:58.903 に答える
8

次のコードを使用して部分文字列を取得できます

-(NSString*)stringBetweenString:(NSString*)start andString:(NSString *)end withstring:(NSString*)str
{
    NSScanner* scanner = [NSScanner scannerWithString:str];
    [scanner setCharactersToBeSkipped:nil];
    [scanner scanUpToString:start intoString:NULL];
    if ([scanner scanString:start intoString:NULL]) {
        NSString* result = nil;
        if ([scanner scanUpToString:end intoString:&result]) {
            return result;
        }
    }
    return nil;
}

これを呼び出すには、

NSString *cURL=[self stringBetweenString:@"www." andString:@".com" withstring:@"abcdefwww.google.comabcdef"];

NSString *cAudiolink=[NSString stringWithFormat:@"www.%@.com",cURL];

cAudiolink は結果の文字列です

于 2012-11-16T12:26:02.277 に答える
2

グーグルで調べた後、私は問題の解決策を得ました。以下のコードを実装しましたが、うまくいきました

   NSString *finalURL;
   NSString *string=@"abcdefwww.yahoomail.comabcdef";

   NSRange range = [string rangeOfString:@"www"];


   NSString  *tempUrl=[string substringFromIndex:range.location];




   NSRange range2 = [tempUrl rangeOfString:@".com"];

   finalURL=[tempUrl substringWithRange:NSMakeRange(0, range2.location+4)];

   NSLog(@"your URL is %@",finalURL); //prints www.yahoomail.com
于 2012-11-16T12:41:32.013 に答える
2

正規表現を使用できます。

このカテゴリの使用:

@implementation NSString (MyRegex)

- (NSString *)firstMatchWithRegex:(NSString *)regex error:(NSError **)e {
    NSError *error = nil;
    NSRegularExpression *re = [NSRegularExpression regularExpressionWithPattern:regex options:NSRegularExpressionSearch error:&error];

    if(re == nil) {
        if(e) *e = error;
        return nil;
    }

    NSArray *matches = [re matchesInString:self options:0 range:NSMakeRange(0, [self length])];

    if([matches count] == 0) {            
        NSString *errorDescription = [NSString stringWithFormat:@"Can't find a match for regex: %@", regex];
        NSError *error = [NSError errorWithDomain:NSStringFromClass([self class]) code:0 userInfo:@{NSLocalizedDescriptionKey : errorDescription}];
        if(e) *e = error;
        return nil;
    }

    NSTextCheckingResult *match = [matches lastObject];
    NSRange matchRange = [match rangeAtIndex:1];
    return [self substringWithRange:matchRange];
}

@end

あなたは呼び出すことができます:

[@"abcdefwww.google.comabcdef" firstMatchWithRegex:@"(www.*\\.com)" error:nil]

戻り値:

www.google.com
于 2012-11-16T12:39:24.373 に答える