-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path46_regular_expressions.go
More file actions
64 lines (49 loc) · 2.24 KB
/
Copy path46_regular_expressions.go
File metadata and controls
64 lines (49 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package gobyexample
import (
"bytes"
"fmt"
"regexp"
)
// RegexpDemo - demonstrates usage of regular expressions
func RegexpDemo() {
// test whether a pattern matches a string
match, _ := regexp.MatchString("p([a-z]+)ch", "peach")
fmt.Println(match)
// for other regexp tasks we need to `Compile` an optimized
// `Regexp` struct
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"))
// This finds the match for the regexp
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"))
// The Submatch variants include information about both the
// whole-pattern matches and the submatches within those matches
fmt.Println(r.FindStringSubmatch("peach punch"))
// Similarly this will return information about the indexes of
// matches and submatches
fmt.Println(r.FindStringSubmatchIndex("peach punch"))
// The All variants of these methods apply to all matches in the input
fmt.Println(r.FindAllString("peach punch pinch", -1))
// These All variants are available for the other methods we saw above
// as well
fmt.Println(r.FindAllStringSubmatchIndex("peach punch pinch", -1))
// Providing a non-negative integer as the second argument to these
// methods will limit the number of matches
fmt.Println(r.FindAllString("peach punch pinch", 2))
// Our examples above had string arguments and used names like `MatchString`.
// We can also provide `[]byte` arguments and drop `String` from the function name.
fmt.Println(r.Match([]byte("peach")))
// When creating constants with regular expressions you can use the `MustCompile` variant
// of `Compile`. A plain `Compile` won't work for constants because it has 2 return values.
r = regexp.MustCompile("p([a-z]+)ch")
// The `regexp` package can also be used to replace subsets of strings with other values
fmt.Println(r.ReplaceAllString("a peach", "<fruit>"))
// The `Func` variant allows you to transform matched text within a given function
in := []byte("a peach")
out := r.ReplaceAllFunc(in, bytes.ToUpper)
fmt.Println(string(out))
}