/ / Co to jest .WithTransparentBounds? - wyrażenia regularne, szybkie, podstawowe, nsregularexpression

Co to jest .WithTransparentBounds? - regex, swift, foundation, nsregularexpression

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 № 1

Cytując z komentarza w NSRegularExpression.h:

NSMatchingAnchored, NSMatchingWithTransparentBounds, i NSMatchingWithoutAnchoringBounds można zastosować do dowolnej metody dopasowania lub zastąpienia. Jeśli NSMatchingAnchored jest określony, dopasowania są ograniczone do tych na początku zakresu wyszukiwania. Gdyby NSMatchingWithTransparentBounds 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. Gdyby NSMatchingWithoutAnchoringBounds 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 i NSMatchingWithoutAnchoringBounds 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