2016-07-31 17 views
1

In einer Textzeichenfolge, ich versuche alles zwischenGebäude Swift/ObjC regulärer Ausdruck

[DATA FORMAT] und /DATA FORMAT]

und

Columns Format: und /DATA FORMAT]

zu diesem Ziel, das ich regelmäßig zu holen verwenden Ausdrücke.

Während das Muster

"\\[DATA FORMAT\\](.*?)\\[/DATA FORMAT\\]"

funktioniert wie erwartet, das Muster

"Columns Format(*.?)\\[/DATA FORMAT\\]"

einen Fehler gibt

Optional("The value “Columns Format(*.?)\\[/DATA FORMAT\\]” is invalid.") The value “Columns Format(*.?)\[/DATA FORMAT\]” is invalid.

in der Konsole (erste Zeile: localizedFailureReason, zweite Zeile: localizedDescription)

Was habe ich vermisst?

Code:

extension String 
{ 
    func match (pattern: String, 
       options: RegularExpression.Options = [.caseInsensitive, .dotMatchesLineSeparators]) -> [String] 
    { 
     do 
     { 
      let regex  = try RegularExpression(pattern: pattern, options: options) 
      let regexAnsw = regex.matches(in: self, options: RegularExpression.MatchingOptions.withTransparentBounds, range: NSMakeRange(0, self.characters.count)) 

      var retStrings = [String]() 

      for rs in regexAnsw 
      { 
       if let range = self.range(from: rs.range) 
       { 
        retStrings.append(self.substring(with: range)) 
       } 
       else 
       { 
        print("match: cant' convert NSRange to range") 
       } 
      } 

      return retStrings 
     } 
     catch let error as NSError 
     { 
      print(error.localizedFailureReason) 
      print(error.localizedDescription) 

      return [String]() 
     } 
    } 
} 

Antwort

2

Sie haben Ihre * und . in dem zweiten regex (in der Capture-Gruppe direkt nach "Column Format") getauscht. Dies macht die Regex ungültig; Die * bezieht sich nicht auf etwas.

+0

OMG. Ich danke dir sehr. – Adeline