2016-07-31 60 views
1

文本字符串,我想大廈斯威夫特/ ObjC正則表達式

[DATA FORMAT]/DATA FORMAT]

Columns Format:/DATA FORMAT]

之間的一切取這個目標我用正表達式。

雖然模式

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

作品如預期,圖案

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

給出了一個錯誤

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

打印在控制檯(第一行:localizedFailureReason,第二行:localizedDescription)

我錯過了什麼?

代碼:

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

回答

2

你有你的*.交換在第二正則表達式(捕捉組之後「列格式」)。這使得正則表達式無效; *不是指任何東西。 OMG。

+0

OMG。非常感謝。 – Adeline