2013-12-05 1 views
4

вот мой фрагмент кода в Go, который можно найти здесь http://play.golang.org/p/L1AcgHf3E4.Перейти regexp FindAllStringSubmatch

package main 

import (
    "fmt" 
    "regexp" 
) 

func main() { 
    reg := regexp.MustCompile("([0-9]+[dh]){2}") 
    str := "2d3h5d" 

    fmt.Println(reg.FindAllStringSubmatch(str, -1)) 

} 

Я бы ожидать, что результат будет [[2d3h 3h] [3h5d 5d]], но это оказалось [[2d3h 3h]]. Можете ли вы объяснить, почему? Заранее спасибо.

ответ

3

Причина в том, что вы не можете получить перекрывающиеся результаты. С двигателями регулярных выражений, которые поддерживают lookahead, вы можете использовать трюк: (?=([0-9]+[dh]){2}), но язык поиска не поддерживается.

Если вы хотите получить все результаты, я предлагаю вам использовать FindAllStringIndex() с ([0-9]+[dh]), а затем определить все непрерывные подстроки со смещением.

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