package main import ( "fmt" "regexp" "strconv" ) func main() { // 1、字符串反向引用脱敏 ReplaceAllString mobileRe := regexp.MustCompile(`(\d{3})\d{4}(\d{4})`) phone := "12311111111" // $$ 转义输出单个字面$ res1 := mobileRe.ReplaceAllString(phone, "前缀$$ $1****$2 后缀") fmt.Println("1.ReplaceAllString 手机号脱敏+$转义:", res1) // 命名捕获组搭配${name}格式 nameRe := regexp.MustCompile(`姓名:(?P[\p{Han}]+)`) userText := "姓名:王五" resName := nameRe.ReplaceAllString(userText, "用户${name}已登记") fmt.Println("命名捕获组替换:", resName) // 2、字面量&常规替换核心对比(带捕获组,差异肉眼可见) litStr := "价格$100,优惠$20" numRe := regexp.MustCompile(`(\d+)`) res2Normal := numRe.ReplaceAllString(litStr, "数值$1") res2Lit := numRe.ReplaceAllLiteralString(litStr, "数值$1") fmt.Println("2.ReplaceAllString 解析捕获组$1:", res2Normal) fmt.Println("2.ReplaceAllLiteralString 纯字面$1:", res2Lit) // 3、动态回调替换 ReplaceAllStringFunc priceText := "金额:10、20、50" res3 := numRe.ReplaceAllStringFunc(priceText, func(s string) string { val, _ := strconv.Atoi(s) return strconv.Itoa(val * 2) }) fmt.Println("3.ReplaceAllStringFunc 数值翻倍:", res3) // ---------------------- []byte 字节系列替换API ---------------------- bytePhone := []byte("12311111111") // 4.ReplaceAll 字节版反向引用 resByte1 := mobileRe.ReplaceAll(bytePhone, []byte("$1****$2")) fmt.Println("4.ReplaceAll 字节脱敏:", string(resByte1)) // 5.ReplaceAllLiteral 字节字面量演示 byteSrc := []byte("积分30") resByte2 := numRe.ReplaceAllLiteral(byteSrc, []byte("分数$1")) fmt.Println("5.ReplaceAllLiteral 字节字面量:", string(resByte2)) // 6.ReplaceAllFunc 字节回调自定义逻辑 bytePrice := []byte("标价5 标价15") resByte3 := numRe.ReplaceAllFunc(bytePrice, func(b []byte) []byte { val, _ := strconv.Atoi(string(b)) return []byte(strconv.Itoa(val + 10)) }) fmt.Println("6.ReplaceAllFunc 字节数值加10:", string(resByte3)) }