2016-07-31 2 views
1

В текстовой строке, я пытаюсь извлечь все междуСтроительство Swift/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.

печатается в консоли (первая линия: локализованная ошибка)

Что я пропустил?

Код:

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

У вас есть ваши * и . местами во втором регулярном выражении (в группе захвата сразу после "Column Format"). Это делает регулярное выражение недействительным; * не имеет никакого отношения ни к чему.

+0

OMG. Огромное спасибо. – Adeline

Смежные вопросы