去regexp FindAllStringSubmatch

时间:2013-12-05 09:01:25

标签: regex go

这是我在Go中的代码片段,可以在http://play.golang.org/p/L1AcgHf3E4找到。

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]]。你能解释一下原因吗?提前谢谢。

1 个答案:

答案 0 :(得分:3)

原因是你无法获得重叠的结果。使用支持预测的正则表达式引擎,您可以使用技巧:(?=([0-9]+[dh]){2})但是语言不支持它。

如果您想获得所有结果,建议您将FindAllStringIndex()([0-9]+[dh])一起使用,然后使用偏移量确定所有连续的子字符串。