func (re *Regexp) find(b []byte, n int, offset int) (match []int) { if n == 0 { b = []byte{0} } ptr := unsafe.Pointer(&b[0]) matchData := re.matchData capturesPtr := unsafe.Pointer(&(matchData.indexes[matchData.count][0])) numCaptures := int32(0) numCapturesPtr := unsafe.Pointer(&numCaptures) pos := int(C.SearchOnigRegex((ptr), C.int(n), C.int(offset), C.int(ONIG_OPTION_DEFAULT), re.regex, re.region, re.errorInfo, (*C.char)(nil), (*C.int)(capturesPtr), (*C.int)(numCapturesPtr))) if pos >= 0 { if numCaptures <= 0 { panic("cannot have 0 captures when processing a match") } match2 := matchData.indexes[matchData.count][:numCaptures*2] match = make([]int, len(match2)) for i := range match2 { match[i] = int(match2[i]) } numCapturesInPattern := int32(C.onig_number_of_captures(re.regex)) + 1 if numCapturesInPattern != numCaptures { log.Fatalf("expected %d captures but got %d\n", numCapturesInPattern, numCaptures) } } return }
func (re *Regexp) match(b []byte, n int, offset int) bool { re.ClearMatchData() if n == 0 { b = []byte{0} } ptr := unsafe.Pointer(&b[0]) pos := int(C.SearchOnigRegex((ptr), C.int(n), C.int(offset), C.int(ONIG_OPTION_DEFAULT), re.regex, re.region, re.errorInfo, (*C.char)(nil), (*C.int)(nil), (*C.int)(nil))) return pos >= 0 }