1// Copyright 2013 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package regexp_test
6
7import (
8	"fmt"
9	"regexp"
10)
11
12func Example() {
13	// Compile the expression once, usually at init time.
14	// Use raw strings to avoid having to quote the backslashes.
15	var validID = regexp.MustCompile(`^[a-z]+\[[0-9]+\]$`)
16
17	fmt.Println(validID.MatchString("adam[23]"))
18	fmt.Println(validID.MatchString("eve[7]"))
19	fmt.Println(validID.MatchString("Job[48]"))
20	fmt.Println(validID.MatchString("snakey"))
21	// Output:
22	// true
23	// true
24	// false
25	// false
26}
27
28func ExampleMatchString() {
29	matched, err := regexp.MatchString("foo.*", "seafood")
30	fmt.Println(matched, err)
31	matched, err = regexp.MatchString("bar.*", "seafood")
32	fmt.Println(matched, err)
33	matched, err = regexp.MatchString("a(b", "seafood")
34	fmt.Println(matched, err)
35	// Output:
36	// true <nil>
37	// false <nil>
38	// false error parsing regexp: missing closing ): `a(b`
39}
40
41func ExampleRegexp_FindString() {
42	re := regexp.MustCompile("foo.?")
43	fmt.Printf("%q\n", re.FindString("seafood fool"))
44	fmt.Printf("%q\n", re.FindString("meat"))
45	// Output:
46	// "food"
47	// ""
48}
49
50func ExampleRegexp_FindStringIndex() {
51	re := regexp.MustCompile("ab?")
52	fmt.Println(re.FindStringIndex("tablett"))
53	fmt.Println(re.FindStringIndex("foo") == nil)
54	// Output:
55	// [1 3]
56	// true
57}
58
59func ExampleRegexp_FindStringSubmatch() {
60	re := regexp.MustCompile("a(x*)b(y|z)c")
61	fmt.Printf("%q\n", re.FindStringSubmatch("-axxxbyc-"))
62	fmt.Printf("%q\n", re.FindStringSubmatch("-abzc-"))
63	// Output:
64	// ["axxxbyc" "xxx" "y"]
65	// ["abzc" "" "z"]
66}
67
68func ExampleRegexp_FindAllString() {
69	re := regexp.MustCompile("a.")
70	fmt.Println(re.FindAllString("paranormal", -1))
71	fmt.Println(re.FindAllString("paranormal", 2))
72	fmt.Println(re.FindAllString("graal", -1))
73	fmt.Println(re.FindAllString("none", -1))
74	// Output:
75	// [ar an al]
76	// [ar an]
77	// [aa]
78	// []
79}
80
81func ExampleRegexp_FindAllStringSubmatch() {
82	re := regexp.MustCompile("a(x*)b")
83	fmt.Printf("%q\n", re.FindAllStringSubmatch("-ab-", -1))
84	fmt.Printf("%q\n", re.FindAllStringSubmatch("-axxb-", -1))
85	fmt.Printf("%q\n", re.FindAllStringSubmatch("-ab-axb-", -1))
86	fmt.Printf("%q\n", re.FindAllStringSubmatch("-axxb-ab-", -1))
87	// Output:
88	// [["ab" ""]]
89	// [["axxb" "xx"]]
90	// [["ab" ""] ["axb" "x"]]
91	// [["axxb" "xx"] ["ab" ""]]
92}
93
94func ExampleRegexp_FindAllStringSubmatchIndex() {
95	re := regexp.MustCompile("a(x*)b")
96	// Indices:
97	//    01234567   012345678
98	//    -ab-axb-   -axxb-ab-
99	fmt.Println(re.FindAllStringSubmatchIndex("-ab-", -1))
100	fmt.Println(re.FindAllStringSubmatchIndex("-axxb-", -1))
101	fmt.Println(re.FindAllStringSubmatchIndex("-ab-axb-", -1))
102	fmt.Println(re.FindAllStringSubmatchIndex("-axxb-ab-", -1))
103	fmt.Println(re.FindAllStringSubmatchIndex("-foo-", -1))
104	// Output:
105	// [[1 3 2 2]]
106	// [[1 5 2 4]]
107	// [[1 3 2 2] [4 7 5 6]]
108	// [[1 5 2 4] [6 8 7 7]]
109	// []
110}
111
112func ExampleRegexp_MatchString() {
113	re := regexp.MustCompile("(gopher){2}")
114	fmt.Println(re.MatchString("gopher"))
115	fmt.Println(re.MatchString("gophergopher"))
116	fmt.Println(re.MatchString("gophergophergopher"))
117	// Output:
118	// false
119	// true
120	// true
121}
122
123func ExampleRegexp_ReplaceAllLiteralString() {
124	re := regexp.MustCompile("a(x*)b")
125	fmt.Println(re.ReplaceAllLiteralString("-ab-axxb-", "T"))
126	fmt.Println(re.ReplaceAllLiteralString("-ab-axxb-", "$1"))
127	fmt.Println(re.ReplaceAllLiteralString("-ab-axxb-", "${1}"))
128	// Output:
129	// -T-T-
130	// -$1-$1-
131	// -${1}-${1}-
132}
133
134func ExampleRegexp_ReplaceAllString() {
135	re := regexp.MustCompile("a(x*)b")
136	fmt.Println(re.ReplaceAllString("-ab-axxb-", "T"))
137	fmt.Println(re.ReplaceAllString("-ab-axxb-", "$1"))
138	fmt.Println(re.ReplaceAllString("-ab-axxb-", "$1W"))
139	fmt.Println(re.ReplaceAllString("-ab-axxb-", "${1}W"))
140	// Output:
141	// -T-T-
142	// --xx-
143	// ---
144	// -W-xxW-
145}
146
147func ExampleRegexp_SubexpNames() {
148	re := regexp.MustCompile("(?P<first>[a-zA-Z]+) (?P<last>[a-zA-Z]+)")
149	fmt.Println(re.MatchString("Alan Turing"))
150	fmt.Printf("%q\n", re.SubexpNames())
151	reversed := fmt.Sprintf("${%s} ${%s}", re.SubexpNames()[2], re.SubexpNames()[1])
152	fmt.Println(reversed)
153	fmt.Println(re.ReplaceAllString("Alan Turing", reversed))
154	// Output:
155	// true
156	// ["" "first" "last"]
157	// ${last} ${first}
158	// Turing Alan
159}
160
161func ExampleRegexp_Split() {
162	a := regexp.MustCompile("a")
163	fmt.Println(a.Split("banana", -1))
164	fmt.Println(a.Split("banana", 0))
165	fmt.Println(a.Split("banana", 1))
166	fmt.Println(a.Split("banana", 2))
167	zp := regexp.MustCompile("z+")
168	fmt.Println(zp.Split("pizza", -1))
169	fmt.Println(zp.Split("pizza", 0))
170	fmt.Println(zp.Split("pizza", 1))
171	fmt.Println(zp.Split("pizza", 2))
172	// Output:
173	// [b n n ]
174	// []
175	// [banana]
176	// [b nana]
177	// [pi a]
178	// []
179	// [pizza]
180	// [pi a]
181}
182