regexp.Regexp.ReplaceAllLiteral

Метод regexp.Regexp.ReplaceAllLiteral выполняет замену всех найденных совпадений с регулярным выражением на указанную литеральную строку. Первым параметром метод принимает исходный байтовый срез []byte, в котором производится поиск. Вторым параметром передается байтовый срез []byte с литеральной строкой замены. В отличие от метода ReplaceAll, метод ReplaceAllLiteral не интерпретирует специальные последовательности в строке замены, такие как $1 или $name, и вставляет их как обычные символы. Метод возвращает новый байтовый срез []byte с выполненными заменами, оставляя исходный срез неизменным.

Синтаксис

gore.ReplaceAllLiteral(src, repl []byte) []byte

Пример

Давайте заменим все цифры в строке на литеральную строку '[digit]':

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`\d+`)
  src := []byte("abc123def456ghi")
  res := re.ReplaceAllLiteral(src, []byte("[digit]"))
  fmt.Println(string(res))
}

Результат выполнения кода:

go"abc[digit]def[digit]ghi"

Пример

Давайте посмотрим, как метод ReplaceAllLiteral отличается от ReplaceAll при использовании шаблонов подстановки:

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`(\d+)-(\d+)`)
  src := []byte("12-34")
  
  resLiteral := re.ReplaceAllLiteral(src, []byte("$1-$2"))
  resAll := re.ReplaceAll(src, []byte("$1-$2"))
  
  fmt.Printf("ReplaceAllLiteral: %s\n", resLiteral)
  fmt.Printf("ReplaceAll: %s\n", resAll)
}

Результат выполнения кода:

go"ReplaceAllLiteral: $1-$2"
"ReplaceAll: 12-34"

Пример

Давайте заменим все email адреса в строке на литеральную строку '[email]':

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`\w+@\w+\.\w+`)
  src := []byte("Contact: user@example.com and admin@test.org")
  res := re.ReplaceAllLiteral(src, []byte("[email]"))
  fmt.Println(string(res))
}

Результат выполнения кода:

go"Contact: [email] and [email]"

Смотрите также