我对Regex很陌生,我只是试图理解它。我试图搜索的字符串是:
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
。如果可能的话,代码是否能够每次都改变一点,以便在String中找到第N个出现的单词。如果它有任何区别,我将在iPhone应用程序中使用此代码,从而使用Objective-C。
答案 0 :(得分: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
答案 1 :(得分:0)
您可以尝试以下内容。您必须使用正则表达式模式替换regex_pattern。在您的情况下,regex_pattern应该类似于@"\\s\\d\\dC"
(空白字符(\\s
)后面跟一个数字(\\d
)后跟一个数字(\\d
)跟随上面 - 大写字母C
。
如果您可以确定字母C永远不会是小写字母,您可能还希望删除NSRegularExpressionCaseInsensitive
选项。
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);
}