0

私は正規表現にかなり慣れていないので、頭を悩ませようとしています。検索しようとしている文字列は次のとおりです。

100 ON 12C 12,41C High Cool OK 0
101 OFF 32C 04,93C Low Dry OK 1
102 ON 07C 08,27C High Dry OK 0

私がやろうとしているのは32C、文字列からその部分を見つけるためにその部分を解決することです。可能であれば、文字列内で N 番目に出現する単語を見つけるために、コードを毎回少しずつ変更できますか。違いがある場合は、iPhone アプリケーションでこのコードを使用し、Objective-C を使用します。

4

2 に答える 2

1

あなたの例は行指向であり、文字列の行の先頭に向かって(同時に)同じ重みがあります。

エンジン フレーバーがグループ化を行う場合、配列などを行う必要なく、単一の正確な回答を取得する出現量指定子を指定できるはずです。
どちらの場合も、答えはキャプチャ バッファ 1 にあります。

例:

$occurance = "2";
---------
/(?:[^\n]*?(\d+C)[^\n]*.*?){$occurance}/s
---------
or
---------
/(?:^.*?(\d+C)[\S\s]*?){$occurance}/m

拡張:

 /
 (?:
      [^\n]*?
      ( \d+C )
      [^\n]* .*?
 ){2}
 /xs


 /
 (?:
      ^ .*?
      ( \d+C )
      [\S\s]*?
 ){2}
 /xm
于 2012-06-18T18:26:17.000 に答える
0

次のようなものを試すことができます。regex_pattern を正規表現パターンに置き換える必要があります。あなたの場合、regex_pattern は@"\\s\\d\\dC"(空白文字 ( \\s) の後に数字 ( \\d) が続き、その後に数字 ( \\d) が続き、その後に大文字C.

NSRegularExpressionCaseInsensitive文字 C が小文字にならないことが確実な場合は、オプションを削除することもできます。

NSError *error = nil;

NSString *regex_pattern = @"\\s\\d\\dC";

NSRegularExpression *regex =
    [NSRegularExpression regularExpressionWithPattern:regex_pattern
    options:(NSRegularExpressionCaseInsensitive |
         NSRegularExpressionDotMatchesLineSeparators)
    error:&error];

NSArray *arrayOfMatches = [regex matchesInString:myString
                                 options:0
                                 range:NSMakeRange(0, [myString length])];

// arrayOfMatches now contains an array of NSRanges;
// now, find and extract the 2nd match as an integer:

if ([arrayOfMatches count] >= 2)  // be sure that there are at least 2 elements in the array
{
    NSRange rangeOfSecondMatch = [arrayOfMatches objectAtIndex:1];  // remember that the array indices start at 0, not 1
    NSString *secondMatchAsString = [myString substringWithRange:
        NSMakeRange(rangeOfSecondMatch.location + 1,  // + 1 to skip over the initial space
                    rangeOfSecondMatch.length - 2)]  // - 2 because we ignore both the initial space and the final "C"

    NSLog(@"secondMatchAsString = %@", secondMatchAsString);

    int temperature = [secondMatchAsString intValue];  // should be 32 for your sample data

    NSLog(@"temperature = %d", temperature);
}
于 2012-06-18T16:20:35.403 に答える