Go regexp

The regexp package provides regular expression functions.


Example

package main

import (
    "fmt"
    "regexp"
)

var (
    Pattern = regexp.MustCompile(`^Chapter ([0-9]+)$`)
)

func main() {
    content := "Chapter 13 and Chapter 14"

    match := Pattern.FindString(content) // "Chapter 13"

    loc := Pattern.FindStringIndex(content) // [0 10]
    match = content[loc[0]:loc[1]]          // "Chapter 13"

    matches := Pattern.FindStringSubmatch(content)
    match = matches[0]   // "Chapter 13"
    number := matches[1] // "13"

    loc = Pattern.FindStringSubmatchIndex(content) // [0 10 8 10]
    match = content[loc[0]:loc[1]]                  // "Chapter 13"
    number = content[loc[2]:loc[3]]                 // "13

    if Pattern.MatchString(content) {
        fmt.Println("yes!")
    }

    matches = Pattern.FindAllString(content, -1) // ["Chapter 13" "Chapter 14"]

    locs := Pattern.FindAllStringIndex(content, -1) // [[0 10] [15 25]]
    match1 := content[locs[0][0]:locs[0][1]]        // "Chapter 13"
    match2 := content[locs[1][0]:locs[1][1]]        // "Chapter 14"

    all_matches := Pattern.FindAllStringSubmatch(content, -1)
    match1 = all_matches[0][0]   // "Chapter 13"
    number1 := all_matches[0][1] // "13"
    match2 = all_matches[1][0]   // "Chapter 14"
    number2 := all_matches[1][1] // "14"

    locs = Pattern.FindAllStringSubmatchIndex(content, -1) // [[0 10 8 10] [15 25 23 25]]
    match1 = content[locs[0][0]:locs[0][1]]                // "Chapter 13"
    number1 = content[locs[0][2]:locs[0][3]]               // "13"
    match2 = content[locs[1][0]:locs[1][1]]                // "Chapter 14"
    number2 = content[locs[1][2]:locs[1][3]]               // "14"
}


Functions

These functions test if some content matches a compiled regular expression.

Name

Signature

Match

(*regexp.Regexp) Match([]byte) bool

MatchString

(*regexp.Regexp) MatchString(string) bool

MatchReader

(*regexp.Regexp) MatchReader(io.RuneReader) bool

These functions return the subcontent that represent the left-most match to a compiled regular expression. If the function name includes Index, then the returned values are start and end indices.

Name

Signature

Returned if no match

Find

(*Regexp) Find([]byte) []byte

nil

FindString

(*Regexp) FindString(string) string

""

FindIndex

(*Regexp) FindIndex([]byte) []int

nil

FindStringIndex

(*Regexp) FindStringIndex(string) []int

nil

FindReaderIndex

(*Regexp) FindReaderIndex(io.RuneReader) []int

nil

These functions return the array of subcontents that represents all matches to a compiled regular expression. The second argument limits how many matches to find; -1 causes all matches to be found.

Name

Signature

Returned if no match

FindAll

(*Regexp) FindAll([]byte, int) [][]byte

nil

FindAllString

(*Regexp) FindAllString(string, int) []string

nil

FindAllIndex

(*Regexp) FindAllIndex([]byte, int) [][]int

nil

FindAllStringIndex

(*Regexp) FindAllStringIndex([]byte, int) [][]int

nil

These functions return the array of subcontents that represents

  1. the left-most match to a compiled regular expression
  2. all matches to capture groups in the expression

If the function name includes Index, then the returned values are paired start and end indices. For example, if there is one capture group, then the values are:

  1. start of match
  2. end of match
  3. start of capture group
  4. end of capture group.

If the function name includes All, then the returned values are arrays of arrays; the first level of depth represents each match, and the second level of depth represents the match and capture groups.

Name

Signature

Returned if no match

FindSubmatch

(*Regexp) FindSubmatch([]byte) [][]byte

nil

FindStringSubmatch

(*Regexp) FindStringSubmatch(string) []string

nil

FindSubmatchIndex

(*Regexp) FindSubmatchIndex([]byte) []int

nil

FindStringSubmatchIndex

(*Regexp) FindStringSubmatchIndex(string) []int

nil

FindReaderSubmatchIndex

(*Regexp) FindReaderSubmatchIndex(r io.RuneReader) []int

nil

FindAllSubmatch

(*Regexp) FindAllSubmatch([]byte, int) [][][]byte

nil

FindAllStringSubmatch

(*Regexp) FindAllStringSubmatch(string, int) [][]string

nil

FindAllSubmatchIndex

(*Regexp) FindAllSubmatchIndex([]byte, int) [][]int

nil

FindAllStringSubmatchIndex

(*Regexp) FindAllStringSubmatchIndex(string, int) [][]int

nil

There are also three shortcut functions where the first argument is an un-compiled regular expression:

Name

Signature

Match

Match(string, []byte) (bool, error)

MatchString

MatchString(string, string) (bool, error)

MatchReader

MatchReader(string, io.RuneReader) (bool, error)

Lastly, there are alternative functions for compiling regular expressions.

The functions with POSIX in the name conform to egrep(1) syntax.


CategoryRicottone

Go/RegExp (last edited 2025-10-06 02:50:38 by DominicRicottone)