Find
With regexp
we are often trying to find strings within a larger string
. We use patterns (passed to MustCompile
) to determine which values match.
To use Find
, we must have byte slices. This is inconvenient in some programs. We can use a method like FindAllString
instead, to operate directly on strings.
Find
exampleHere we use Find
. We try to find a 3-digit sequence that begins with the value 2. The Find
method returns the leftmost matching sequence as a byte slice.
package main import ( "fmt" "regexp" ) func main() { // Match 3-digit values starting with 2. re := regexp.MustCompile("2\\d\\d") // Use find to get leftmost match. result := re.Find([]byte("123 124 125 205 211")) // Convert back to string and print it. fmt.Println(string(result)) }205
FindAllString
This func
finds multiple matches of a pattern within a string
. It returns the values in a slice—we can loop over it with a for
-loop.
FindAllString
. The results are in a slice of strings, so we can print them with no conversion.package main import ( "fmt" "regexp" ) func main() { // Match 3-char values starting with digit 1. re := regexp.MustCompile("1..") // Find and loop over all matching strings. results := re.FindAllString("123 124 125 200 211", -1) for i := range(results) { fmt.Println(results[i]) } }123 124 125
With Find
methods, we perform a search within the source string
—the entire string
is not matched as in MatchString()
. We can test matches in a for
-loop after the method call.