我已經回去&來回了幾個小時試圖解決的東西,現在還不能滿意的結果。
我想獲得一個iPhone的距離的UIDevice的用戶名都用英語和西班牙語。所以我想出了一個正則表達式(「Andres的iPhone」>「Andres」)和(「iPhone de Andres」>「Andres」)。
神奇的是一樣的東西:
"(?:iPhone|iphone|phone|iPad|ipad|pad|iPod|ipod|pod)(?:\\s+\\S+)*\\s+de\\s+(.+)|"
"(.+)'s\\s+(?:iPhone|iphone|phone|iPad|ipad|pad|iPod|ipod|pod)(?:\\s+\\S+)*"
問題
當試圖從[[UIDevice currentDevice] name]
子串的用戶名可以通過兩個備選方案之一相匹配正則表達式。
這導致實際的名稱可能通過以下方式獲得:
[[regEx firstMatchInString:str options:0 range:NSMakeRange(0, [str length])] rangeAtIndex:1]
如果第一備選匹配;但是,如果第二替代執行匹配,則它是:
[[regEx firstMatchInString:str options:0 range:NSMakeRange(0, [str length])] rangeAtIndex:2]
注意,根據替代匹配,我必須得到第一索引或第二。目前我已經解決這個曾與:
+ (NSString *)getSubstringInString:(NSString *)str matchedByRegEx:(NSRegularExpression *)regEx
{
NSString * result = nil;
NSTextCheckingResult * match = [regEx firstMatchInString:str options:0 range:NSMakeRange(0, [str length])];
for (int i=1; i<[match numberOfRanges]; i++) {
NSRange matchRange = [match rangeAtIndex:i];
if (!NSEqualRanges(matchRange, NSMakeRange(NSNotFound, 0))) {
result = [str substringWithRange:matchRange];
}
}
return result;
}
實際問題
但有一個更好的方式來獲得匹配的字符串,無論是什麼從正則表達式的替代使用呢?
希望我已經說清楚了,在此先感謝任何可能的幫助!
感謝您的改進。我完全忽略了帽子的事情:我設置了不區分大小寫的選項,但忘了更新表達式。接得好! –
關於這個問題,如果我確實匹配!.range(objc中的[匹配範圍]),我得到字符串的全部範圍,而不是匹配的表達式。 –