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/に変換する。