2016-06-03 22 views
1

Ich muss mehrere Leerzeichen in ein Leerzeichen reduzieren. Nach dem Graben um in Foundation-Framework NSString Klassenreferenz, Google und Stackoverflow, fand ich genügend Informationen und Beispielcode für michWas ist .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) 
} 

zu erhalten, die funktioniert.

Allerdings kann ich nicht scheinen, eine Erklärung in der Dokumentation für .WithTransparentBounds

zu finden, wenn ich es von meinem Code entfernen

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) 
} 

Das ist nur gut, auch funktioniert. Aber bevor ich das hier verlasse, würde ich gerne wissen, was die Option bedeutet. MitTransparentBounds heißt eigentlich, für eines Tages könnte ich es brauchen?

Vielen Dank im Voraus!

Antwort

2

Zitiert aus dem Kommentar in NSRegularExpression.h:

NSMatchingAnchored, NSMatchingWithTransparentBounds und NSMatchingWithoutAnchoringBounds ein Spiel anwenden können oder Verfahren ersetzen. Wenn NSMatchingAnchored angegeben ist, sind die Übereinstimmungen auf diejenigen am Anfang des Suchbereichs beschränkt. Wenn NSMatchingWithTransparentBounds angegeben, Anpassung kann über die Grenzen des Suchbereichs, für Zwecke wie die Wortgrenzdetektions, Vorgriffs-usw.NSMatchingWithoutAnchoringBounds Wenn angegeben wird, und ^$ nicht automatisch anzupassen den Anfang und das Ende Teile der Zeichenfolge untersuchen des Suchbereichs (aber wird immer noch den Anfang und das Ende der gesamten Zeichenfolge übereinstimmen). NSMatchingWithTransparentBounds und NSMatchingWithoutAnchoringBounds haben keine Auswirkung, wenn der Suchbereich den gesamten String abdeckt.

Hier ist ein Beispiel, das die Differenz darstellt, wenn Sie WithTransparentBounds umfassen:

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