1

私は C のような構文に慣れていないので、ソース文字列内のすべての 'A' から 'B' を検索して置換するコードを書きたいと考えています。タイプ Regexp、src、および repl を設定するにはどうすればよいですか? Go ドキュメントの ReplaceAllコード スニペットは次のとおりです。

// ReplaceAll は、正規表現にすべて一致する src のコピーを返します
// repl に置き換えられました。式はサポートされていません
// (例: \1 または $1) を置換テキストに挿入します。
func (re *Regexp) ReplaceAll(src, repl []byte) []byte {
    lastMatchEnd := 0; // 最新の試合の終了位置
    searchPos:= 0; // 次に一致を探す位置
    buf := new(bytes.Buffer);
    for searchPos <= len(src) {
        a := re.doExecute("", src, searchPos);
        もしlen(a) == 0 {
            break // もう一致しません
        }

// Copy the unmatched characters before this match. buf.Write(src[lastMatchEnd:a[0]]); // Now insert a copy of the replacement string, but not for a // match of the empty string immediately after another match. // (Otherwise, we get double replacement for patterns that // match both empty and nonempty strings.) if a[1] > lastMatchEnd || a[0] == 0 { buf.Write(repl) } lastMatchEnd = a[1]; // Advance past this match; always advance at least one character. _, width := utf8.DecodeRune(src[searchPos:len(src)]); if searchPos+width > a[1] { searchPos += width } else if searchPos+1 > a[1] { // This clause is only needed at the end of the input // string. In that case, DecodeRuneInString returns width=0. searchPos++ } else { searchPos = a[1] } } // Copy the unmatched characters after the last match. buf.Write(src[lastMatchEnd:len(src)]); return buf.Bytes();

}

4

2 に答える 2

1

ここに小さな例があります。Regexp テストクラスでも良い例を見つけることができます

package main

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

func main() {
    re, _ := regexp.Compile("e")
    input := "hello"
    replacement := "a"
    actual := string(re.ReplaceAll(strings.Bytes(input), strings.Bytes(replacement)))
    fmt.Printf("new pattern %s", actual)
}
于 2009-11-15T17:28:54.267 に答える