空飛ぶとんジニア

小さな企業のWeb担当者が日々起こったことを共有したり、思ったこと、勉強したことを書いていくブログ

Go言語で正規表現にマッチした文字列を処理してから、置換する(replaceAllStringFunc)

便利な関数があったのでメモ
「sample text」を全部*で置換したい、ただ文字数を同じにしたい等で使えます。(こんなユースケースあるんだろうか)
検索してよく出てくる関数はReplaceAllStringで、置換するワードが第2引数に渡した値になります。

replaceAllStringFuncは2つめに関数を渡すことができ、マッチした文字をその関数に渡してもらえるので、
処理してから置き換える文字を変更することができます。

以下がサンプル

package main

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

func main() {
    str := "「正規表現によるマッチ」を意味する(専用の)演算子がある言語なども一部ある。"
    regx := regexp.MustCompile(`「(.*?)」`)

    repStr := func(str string) string {
        runeStr := []rune(str)
        lenRuneStr := len(runeStr)

        return strings.Repeat("*", lenRuneStr)
    }

    matches := regx.ReplaceAllStringFunc(
        str,
        repStr,
    )
    fmt.Println(matches)
}

動作チェックは以下のリンク先でできます。

The Go Playground

Go言語は結構funcを渡せる関数があるので、いいですね!

ではでは〜