2016-09-20 10 views
0

は私がresultの長さを印刷するとき、そうNSRegularExpressionNSRegularExpressionキャプチャグループは

let string = "QWERTY123 ASDFGH" 
let nsString = string as NSString 
let regex = try! NSRegularExpression(pattern: "(\\D+)\\d+\\s(\\D+)", options: []) 
let result = regex.matchesInString(string, options: [], range: NSMakeRange(0, nsString.length)) 

print(result.count) // prints length of array 
for r in 1..<result[0].numberOfRanges 
{ 
    print(nsString.substringWithRange(result[0].rangeAtIndex(r))) // prints captured groups 
} 
for r in result 
{ 
    print(nsString.substringWithRange(r.range)) 
} 

使用してキャプチャグループを得るにはほとんど問題の理解を持って明確化、私は1を取得します。これは、見つかった式の範囲がresult[0]であることを意味します。しかし、キャプチャされたグループはどのようにresult[0]に存在しますか?私は間違ったことを考えていますか?

次は、正規表現を(QWE)tとすると、キャプチャされたグループのループがクラッシュします。どのようにnilまたは次の正規表現でキャプチャされたグループが存在しないことを示す何かを返すのですか?

ありがとうございました!

答えて

0
  • matchesInStringは、(キャプチャされたグループを無視して)正規表現のすべての一致を返します。
    あなたの例では、の1つがと一致しています。
  • マッチの最初のインデックスの範囲(result)は、キャプチャされたグループのない正規表現の一致範囲({0, 16})です。
  • 範囲1..<numberOfRangesは、捕捉された群の範囲を表す。

  • 正規表現が一致しない場合、result.countは0で、result[0]は最初の項目がないためにクラッシュします。

+0

ありがとうございました! –

関連する問題