2016-06-03 11 views
1

Мне нужно свернуть несколько пробелов в одно пространство. После того, как копаться в Foundation Framework NSString класса Reference, Google и StackOverflow, я нашел достаточно информации и примеры кода, чтобы заставить меняЧто такое .WithTransparentBounds?

var myString = "Snoopy  Doogitz" 

if let regex = try? NSRegularExpression(pattern: "\\s+", options: []) { 
    let modString = regex.stringByReplacingMatchesInString(myString, options: .WithTransparentBounds, range: NSMakeRange(0, myString.characters.count), withTemplate: " ") 
    print(modString) 
} 

, который работает.

Однако, я не могу найти объяснение в документации для .WithTransparentBounds

Если я удалить его из моего кода

var myString = "Snoopy  Doogitz" 

if let regex = try? NSRegularExpression(pattern: "\\s+", options: []) { 
    let modString = regex.stringByReplacingMatchesInString(myString, options: [], range: NSMakeRange(0, myString.characters.count), withTemplate: " ") 
    print(modString) 
} 

Это работает очень хорошо, тоже. Но прежде, чем я оставлю это, мне бы хотелось узнать, какой вариант. На самом деле это означает, что когда-нибудь мне это понадобится?

Заранее благодарен!

ответ

2

Цитирование из комментария в NSRegularExpression.h:

NSMatchingAnchored, NSMatchingWithTransparentBounds и NSMatchingWithoutAnchoringBounds можно применить к любой игре или заменить метод. Если указано значение NSMatchingAnchored, совпадения ограничиваются таковыми в начале диапазона поиска. Если NSMatchingWithTransparentBounds указано, согласование может исследовать части строки за пределы диапазона поиска, для таких целей, как граница слова обнаружение, опережающий просмотр и т.д. Если NSMatchingWithoutAnchoringBounds указано, ^ и $ не будет автоматически соответствовать началу и конец диапазона поиска (но все равно будет соответствовать началу и концу всей строки). NSMatchingWithTransparentBounds и NSMatchingWithoutAnchoringBounds не действуют, если диапазон поиска охватывает всю строку.

Вот пример, который иллюстрирует разницу, когда вы включаете WithTransparentBounds:

let str = "foobarbaz" 

let re = try! NSRegularExpression(pattern: "bar\\b", options: []) 
re.numberOfMatchesInString(str, options: .WithTransparentBounds, range: NSRange(location: 0, length: 9)) // returns 0 
re.numberOfMatchesInString(str, options: .WithTransparentBounds, range: NSRange(location: 3, length: 3)) // returns 0 
re.numberOfMatchesInString(str, options: [], range: NSRange(location: 3, length: 3)) // returns 1