2016-07-31 6 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、2行目: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

あなたが持っているあなたの*.(右「列フォーマット」の後にキャプチャグループ内)は、第2の正規表現にスワップ。これは正規表現を無効にします。 *は何も参照していません。

+0

OMG。どうもありがとうございます。 – Adeline