Go
式を使って置換する
- s := "2010-1-3 から 2010-12-31 まで"
- r := regexp.MustCompile(`\d{4}-\d{1,2}-\d{1,2}`)
- s = r.ReplaceAllStringFunc(s, func(matched string) string {
- return strings.Replace(matched, "-", "/", -1)
- })
グループを使い、式を使って置換する
(「$1」などが使えないので、それに代わる関数を用意する)
- func ReplaceAllStringSubmatchFunc(re *regexp.Regexp, src string, repl func([]string) string) string {
- result := ""
- for {
- indexes := re.FindStringSubmatchIndex(src)
- if len(indexes) == 0 {
- result += src
- break
- }
- groupCount := len(indexes) / 2
- groups := make([]string, groupCount)
- for i := 0; i < groupCount; i++ {
- groups[i] = src[indexes[i * 2]:indexes[i * 2 + 1]]
- }
- result += src[:indexes[0]] + repl(groups)
- src = src[indexes[1]:]
- }
- return result
- }
- s := "2010-1-3 から 2010-12-31 まで"
- r := regexp.MustCompile(`(\d{4})-(\d{1,2})-(\d{1,2})`)
- s := ReplaceAllStringSubmatchFunc(r, s, func(groups []string) string {
- return groups[1] + "/" + groups[2] + "/" + groups[3]
- })