Muszę zwinąć wiele białych znakóww jedną przestrzeń. Po przekopaniu się w Foundation Framework NSString Class Reference, Google i stackoverflow, znalazłem wystarczającą ilość informacji i przykładowy kod, aby dostać się do
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 )
}
który działa.
Jednak nie mogę znaleźć wyjaśnienia w dokumentacji .WithTransparentBounds
Jeśli usunę go z mojego kodu
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 )
}
To też działa dobrze. Ale zanim to porzucę, chciałbym wiedzieć, co oznacza opcja. Z TransTransparentBounds tak naprawdę oznacza, że pewnego dnia mogę jej potrzebować?
Z góry dziękuję!
Odpowiedzi:
2 dla odpowiedzi № 1Cytując z komentarza w NSRegularExpression.h:
NSMatchingAnchored
,NSMatchingWithTransparentBounds
, iNSMatchingWithoutAnchoringBounds
można zastosować do dowolnej metody dopasowania lub zastąpienia. JeśliNSMatchingAnchored
jest określony, dopasowania są ograniczone do tych na początku zakresu wyszukiwania. GdybyNSMatchingWithTransparentBounds
jest określone, dopasowanie może badać części ciągu poza granicami zakresu wyszukiwania, w celach takich jak wykrywanie granicy słowa, wyprzedzenie itp. GdybyNSMatchingWithoutAnchoringBounds
jest specyficzne,^
i$
nie będzie automatycznie dopasowywać początku i końca zakresu wyszukiwania (ale nadal będzie pasować do początku i końca całego łańcucha).NSMatchingWithTransparentBounds
iNSMatchingWithoutAnchoringBounds
nie działają, jeśli zakres wyszukiwania obejmuje cały ciąg.
Oto przykład ilustrujący różnicę po dołączeniu 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