2
我今天正在修補Objective-C,但我遇到了一些奇怪的行爲。基本上我試圖從NSString中替換所有非字母小寫字符。我已基本歸結爲:[NSRegularExpression stringByReplacingMatchesInString]意外的行爲
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSError *error;
NSRegularExpression *pattern = [[NSRegularExpression alloc] initWithPattern:@"/[^abcdefghijklmnopqrstuvwxyz]/" options:0 error:&error];
NSString *replacableStuff = @"a b c\nd e";
NSLog(@"%@", [pattern stringByReplacingMatchesInString:replacableStuff options:0 range:NSMakeRange(0, [replacableStuff length]) withTemplate:@""]);
}
return 0;
}
然而,更換似乎從來沒有發生;運行此日誌「a b c \ nd e」到日誌thingie。 (我期待看到「abcde」)。我嘗試了更簡單的模式,如/[aeiou]/
甚至只是/a/
,但無論我嘗試什麼,stringByReplacingMatchesInString方法似乎都不會取代任何內容。我忽略了什麼?
啊哈!就是這樣。當然,現在我覺得自己就像一個doofus,因爲在我看到的所有例子中都沒有注意到這一點。謝謝!至於範圍的東西,我瞭解到 - [在這個網站上](實際上) - (http://stackoverflow.com/questions/1930487/will-az-ever-match-accented-characters-in-preg-pcre)當涉及到PHP的PCRE庫時,字母範圍可以根據系統區域設置匹配不同的字母,所以我習慣於在可能存在歧義時寫出它們。這是我不需要擔心與NSRegularExpression? – 2012-07-07 12:20:44
@GarrettAlbright關於範圍依賴於編碼是一個很好的觀點。但是,在Objective C程序運行的環境中(mac和ios設備),您沒有機會觸及非正統編碼,而拉丁字母的字母未安排在連續的塊中。 – dasblinkenlight 2012-07-07 12:36:01