2016-09-20 2 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은 (정규 캡처 된 그룹을 무시한) 모든 정규 표현식을 반환합니다.
    예를 들어 중 하나가입니다.
  • 일치 항목의 첫 번째 색인 범위 (result)는 캡처 된 그룹이없는 정규식의 일치 범위입니다 ({0, 16}).
  • 범위 1..<numberOfRanges은 캡처 한 그룹의 범위를 나타냅니다.

  • 정규식이 일치하지 않으면 result.count은 0이고 result[0]은 첫 번째 항목이 없기 때문에 충돌합니다.

+0

감사합니다. –