Golang Regexp.Match
last modified April 20, 2025
This tutorial explains how to use the Regexp.Match
method in Go.
We'll cover byte slice matching and provide practical examples.
A regular expression is a sequence of characters that defines a search pattern. It's used for pattern matching within strings or byte slices.
The Regexp.Match method reports whether the compiled regular expression matches any part of the byte slice b. It's useful for raw byte data.
Basic Regexp.Match Example
The simplest use of Regexp.Match
checks if a byte slice matches
a pattern. Here we check for a simple word match in bytes.
package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile(`hello`) data := []byte("hello there") fmt.Println(re.Match(data)) // true fmt.Println(re.Match([]byte("goodbye"))) // false }
We compile the pattern "hello" and use Match
to test byte slices.
The method returns true if the pattern is found in the input bytes.
Matching Numbers in Byte Data
This example demonstrates matching numeric patterns in raw byte data.
package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile(`\d+`) data := []byte("The price is 123 USD") if re.Match(data) { fmt.Println("Number found in data") } else { fmt.Println("No numbers found") } }
The pattern matches one or more digits. Match
scans the byte slice
for any numeric sequence. This is useful for binary data processing.
Case-Insensitive Matching
Regexp.Match
can perform case-insensitive matching when the
pattern is compiled with appropriate flags.
package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile(`(?i)hello`) data1 := []byte("Hello there") data2 := []byte("HELLO there") fmt.Println(re.Match(data1)) // true fmt.Println(re.Match(data2)) // true fmt.Println(re.Match([]byte("goodbye"))) // false }
The (?i)
flag makes the match case-insensitive. The pattern matches
any case variation of "hello" in the byte data.
Matching Binary Data Patterns
This example shows how to match specific byte patterns in binary data.
package main import ( "fmt" "regexp" ) func main() { // Match a specific byte sequence (PNG header) re := regexp.MustCompile(`\x89PNG\x0D\x0A\x1A\x0A`) pngHeader := []byte{0x89, 'P', 'N', 'G', 0x0D, 0x0A, 0x1A, 0x0A} jpegHeader := []byte{0xFF, 0xD8, 0xFF} fmt.Println("Is PNG:", re.Match(pngHeader)) // true fmt.Println("Is JPEG:", re.Match(jpegHeader)) // false }
We match the magic number that identifies PNG files. Match
is
particularly useful for binary file format detection.
Matching Multiple Patterns
You can combine patterns using alternation to match multiple possibilities.
package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile(`error|warning|critical`) logData := []byte("2025-04-20 12:00:00 [error] Connection failed") if re.Match(logData) { fmt.Println("Log contains important message") } else { fmt.Println("Log looks normal") } }
The pattern matches any of three log severity levels. Match
scans
for any of these patterns in the byte data.
Performance with Large Data
Regexp.Match
is efficient for scanning large byte slices.
Here's an example with a larger dataset.
package main import ( "fmt" "regexp" "strings" ) func main() { re := regexp.MustCompile(`secret`) // Simulate large data (1MB) largeData := []byte(strings.Repeat("x", 1<<20) + "secret") if re.Match(largeData) { fmt.Println("Secret found in large data") } else { fmt.Println("No secret found") } }
The method efficiently scans through 1MB of data to find the pattern. Compiled regex patterns are optimized for performance.
Anchored Matching
You can anchor patterns to match at specific positions in the byte slice.
package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile(`^START`) data1 := []byte("START of data") data2 := []byte("Data with START in middle") fmt.Println(re.Match(data1)) // true fmt.Println(re.Match(data2)) // false }
The ^
anchor ensures the pattern only matches at the start of the
byte slice. This is useful for protocol headers or fixed-format data.
Source
Go regexp package documentation
This tutorial covered the Regexp.Match
method in Go with
practical examples of byte slice pattern matching.
Author
List all Go tutorials.