regexp.Regexp.Expand
Метод Expand применяется к объекту Regexp и выполняет подстановку шаблона, заменяя специальные конструкции вида $name или ${name} на соответствующие значения из результатов поиска. В первый параметр передается слайс байт, в который будет записан результат (обычно используется nil для создания нового). Второй параметр - шаблон для подстановки. Третий параметр - исходный текст в виде слайса байт. Четвертый параметр - слайс байт, содержащий подстроки, найденные при помощи метода FindSubmatch или подобных.
Синтаксис
re.Expand(dst, template, src, match)
Пример
Давайте найдем подстроку, соответствующую регулярному выражению, и подставим ее в шаблон:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(\w+)=(\w+)`)
src := []byte("key=value")
match := re.FindSubmatch(src)
template := []byte("matched: $1 -> $2")
res := re.Expand(nil, template, src, match)
fmt.Println(string(res))
}
Результат выполнения кода:
"matched: key -> value"
Пример
Используем конструкцию ${name} для подстановки значения с указанием имени группы:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(?P<first>\w+)=(?P<second>\w+)`)
src := []byte("user=admin")
match := re.FindSubmatch(src)
template := []byte("${first} is ${second}")
res := re.Expand(nil, template, src, match)
fmt.Println(string(res))
}
Результат выполнения кода:
"user is admin"
Пример
Используем существующий буфер для записи результата, чтобы избежать выделения новой памяти:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(\d{2}):(\d{2})`)
src := []byte("time: 12:34")
match := re.FindSubmatch(src)
template := []byte("hours: $1, minutes: $2")
dst := make([]byte, 0, 50)
dst = re.Expand(dst, template, src, match)
fmt.Println(string(dst))
}
Результат выполнения кода:
"hours: 12, minutes: 34"
Смотрите также
-
метод
ExpandString,
который работает со строковыми данными вместо байтовых слайсов -
метод
ReplaceAll,
который выполняет замену по регулярному выражению -
метод
ReplaceAllString,
который заменяет все вхождения строки по шаблону -
метод
FindSubmatch,
который возвращает слайс найденных подстрок для использования с Expand