Go言語で"<p><img src="/site/files8/P9160020.JPG" /></p>"の文字列を、<p><img src="./files/P9160020.JPG"></p>"に置換してみる。


package main

import (
"fmt"
"regexp"
"strings"
)

func main() {
line := "<p><img src=\"/site/files8/P9160020.JPG\" alt=\"\" /></p>"

line = strings.Replace(line, "alt=\"\"", "", 1)
fmt.Println(line)

line = strings.Replace(line, "/>", ">", 1)
fmt.Println(line)

line = strings.Replace(line, "  ", "", -1)
fmt.Println(line)

reg := regexp.MustCompile("/site/files[0-9]*?/")
line = reg.ReplaceAllString(line, "./files/")
fmt.Println(line)
}

strings.Replace関数は、文字列に含まれる部分文字列を指定した文字列で置換し、新しい文字列を返す関数である。2番目の引数に指定した文字列に一致する箇所を3番目の引数で指定した文字列で置き換える。最後の引数は置換する回数の最大数で、-1を与えるとすべて置換するという意味になる。

まずは、alt=から後ろの部分がいらないので、ここを""(空白)に置換。その次に、最後の/がいらないので、ここを/>を>に置換する。ここで、/だけにすると、他の部分の/がなくなってしまうので>をつけることで、最後の/と認識させた。

最後に正規表現でreg := regexp.MustCompile("/site/files[0-9]*?/")で記載し、/site/files[0-9]*?で指定のパターンの文字列だけを取得する。

reg.ReplaceAllStringでlineの中で、/site/files[0-9]のパターンの文字列を./files/に変換する。