This commit is contained in:
badkaktus 2019-10-09 21:29:55 +03:00
parent 7a6019d8db
commit e69f56644e
3 changed files with 45 additions and 42 deletions

View File

@ -44,7 +44,7 @@ Defer
Функции коллекции (Collection Functions) Функции коллекции (Collection Functions)
Строковые функции (String Functions) Строковые функции (String Functions)
Форматирование строк (String Formatting) Форматирование строк (String Formatting)
Regular Expressions Регулярные выражения (Regular Expressions)
JSON JSON
XML XML
Time Time

View File

@ -1,6 +1,6 @@
// Go offers built-in support for [regular expressions](http://en.wikipedia.org/wiki/Regular_expression). // Go предлагает встроенную поддержку [регулярных выражений](http://en.wikipedia.org/wiki/Regular_expression).
// Here are some examples of common regexp-related tasks // Вот несколько примеров, связанных с регулярными
// in Go. // выражениями в Go.
package main package main
@ -12,71 +12,74 @@ import (
func main() { func main() {
// This tests whether a pattern matches a string. // Проверяем, соответствует ли шаблон строке
match, _ := regexp.MatchString("p([a-z]+)ch", "peach") match, _ := regexp.MatchString("p([a-z]+)ch", "peach")
fmt.Println(match) fmt.Println(match)
// Above we used a string pattern directly, but for // Выше мы использовали строковый шаблон напрямую,
// other regexp tasks you'll need to `Compile` an // но для других задач с регулярными выражениями,
// optimized `Regexp` struct. // необходимо `скомпилировать` оптимизированную
// структуру `Regexp`.
r, _ := regexp.Compile("p([a-z]+)ch") r, _ := regexp.Compile("p([a-z]+)ch")
// Many methods are available on these structs. Here's // Множество методов доступны для этой структуры.
// a match test like we saw earlier. // Вот тест на совпадение, который мы видели ранее.
fmt.Println(r.MatchString("peach")) fmt.Println(r.MatchString("peach"))
// This finds the match for the regexp. // Этот метод находит соответствие для регулярного
// выражения.
fmt.Println(r.FindString("peach punch")) fmt.Println(r.FindString("peach punch"))
// This also finds the first match but returns the // Этот метод также находит первое совпадение, но
// start and end indexes for the match instead of the // возвращает начальный и конечный индексы совпадения
// matching text. // вместо текста.
fmt.Println(r.FindStringIndex("peach punch")) fmt.Println(r.FindStringIndex("peach punch"))
// The `Submatch` variants include information about // Варианты `Submatch` включают в себя информацию
// both the whole-pattern matches and the submatches // как о совпадениях с полным шаблоном, так и о
// within those matches. For example this will return // совпадениях с частями шаблона. Например, эта
// information for both `p([a-z]+)ch` and `([a-z]+)`. // конструкция вернет информацию как
// для `p([a-z]+)ch`, так и для `([a-z]+)`.
fmt.Println(r.FindStringSubmatch("peach punch")) fmt.Println(r.FindStringSubmatch("peach punch"))
// Similarly this will return information about the // Точно так же это возвратит информацию об индексах
// indexes of matches and submatches. // совпадений и подсовпадений.
fmt.Println(r.FindStringSubmatchIndex("peach punch")) fmt.Println(r.FindStringSubmatchIndex("peach punch"))
// The `All` variants of these functions apply to all // Метод `All` применяется ко всем совпадениям на входе,
// matches in the input, not just the first. For // а не только к первому. Например, чтобы найти все
// example to find all matches for a regexp. // совпадения для регулярного выражения.
fmt.Println(r.FindAllString("peach punch pinch", -1)) fmt.Println(r.FindAllString("peach punch pinch", -1))
// These `All` variants are available for the other // Этот метод `All` доступен и для других функций,
// functions we saw above as well. // которые мы видели выше.
fmt.Println(r.FindAllStringSubmatchIndex( fmt.Println(r.FindAllStringSubmatchIndex(
"peach punch pinch", -1)) "peach punch pinch", -1))
// Providing a non-negative integer as the second // Указание неотрицательного целого числа в качестве
// argument to these functions will limit the number // второго аргумента для этих функций ограничит
// of matches. // количество совпадений.
fmt.Println(r.FindAllString("peach punch pinch", 2)) fmt.Println(r.FindAllString("peach punch pinch", 2))
// Our examples above had string arguments and used // В наших примерах выше были строковые аргументы и
// names like `MatchString`. We can also provide // использовались такие имена, как `MatchString`. Мы
// `[]byte` arguments and drop `String` from the // также можем предоставить `[]byte` аргументы и удалить
// function name. // `String` из имени функции.
fmt.Println(r.Match([]byte("peach"))) fmt.Println(r.Match([]byte("peach")))
// When creating constants with regular expressions // При создании констант с регулярными выражениями
// you can use the `MustCompile` variation of // вы можете использовать `MustCompile`, как аналог
// `Compile`. A plain `Compile` won't work for // `Compile`. Обычный `Compile` не будет работать
// constants because it has 2 return values. // для констант, потому что он возвращает 2 значения.
r = regexp.MustCompile("p([a-z]+)ch") r = regexp.MustCompile("p([a-z]+)ch")
fmt.Println(r) fmt.Println(r)
// The `regexp` package can also be used to replace // Пакет `regexp` также можно использовать для
// subsets of strings with other values. // замены подмножеств строк другими значениями.
fmt.Println(r.ReplaceAllString("a peach", "<fruit>")) fmt.Println(r.ReplaceAllString("a peach", "<fruit>"))
// The `Func` variant allows you to transform matched // Вариант с `Func` позволяет вам преобразовывать
// text with a given function. // сопоставленный текст с заданной функцией.
in := []byte("a peach") in := []byte("a peach")
out := r.ReplaceAllFunc(in, bytes.ToUpper) out := r.ReplaceAllFunc(in, bytes.ToUpper)
fmt.Println(string(out)) fmt.Println(string(out))

View File

@ -13,5 +13,5 @@ p([a-z]+)ch
a <fruit> a <fruit>
a PEACH a PEACH
# For a complete reference on Go regular expressions check # Для получения полной ссылки на регулярные выражения Go
# the [`regexp`](http://golang.org/pkg/regexp/) package docs. # проверьте документацию пакета [`regexp`](http://golang.org/pkg/regexp/).