The regexp package checks text against a pattern when simple string helpers are not enough.

regular expression A regular expression is a compact pattern for matching text.

Regexp Match

email
regexp_match.go
Replay: real traced execution (multi-file project)
package main

import (
	"fmt"
	"regexp"
)

func main() {
	var email = "ada@example.com"
	pattern := regexp.MustCompile(`^[a-z]+@example\.(com|org)$`)
	matched := pattern.MatchString(email)
	label := "invalid"

	if matched {
		label = "example address"
	}

	fmt.Println("email=", email)
	fmt.Println("matched=", matched)
	fmt.Println("label=", label)
}
package main

import (
	"fmt"
	"regexp"
)

func main() {
	var email = "linus@example.org"
	pattern := regexp.MustCompile(`^[a-z]+@example\.(com|org)$`)
	matched := pattern.MatchString(email)
	label := "invalid"

	if matched {
		label = "example address"
	}

	fmt.Println("email=", email)
	fmt.Println("matched=", matched)
	fmt.Println("label=", label)
}
package main

import (
	"fmt"
	"regexp"
)

func main() {
	var email = "bad-name"
	pattern := regexp.MustCompile(`^[a-z]+@example\.(com|org)$`)
	matched := pattern.MatchString(email)
	label := "invalid"

	if matched {
		label = "example address"
	}

	fmt.Println("email=", email)
	fmt.Println("matched=", matched)
	fmt.Println("label=", label)
}
  1. email ← "ada@example.com", pattern ← &regexp.Regexp{expr:"^[a-z]+@example\\.(com|org)$", prog:(*syntax.Prog)(⟨addr A⟩), onepass:(*regexp.onePassProg)(⟨addr B⟩), numSubexp:1, maxBitStateLen:0, subexpNames:[]string{"", ""}, prefix:"", prefixBytes:[]uint8(nil), prefixRune:0, prefixEnd:0x1, mpool:0, matchcap:4, prefixComplete:false, cond:0x4, minInputLen:13, longest:false}

    8func main() {9  var email→ "ada@example.com" = "ada@example.com" //@email="linus@example.org", "bad-name"10  pattern→ &regexp.Regexp{expr:"^[a-z]+@example\\.(com|org)$", prog:(*syntax.Prog)(⟨addr A⟩), onepass:(*regexp.onePassProg)(⟨addr B⟩), numSubexp:1, maxBitStateLen:0, subexpNames:[]string{"", ""}, prefix:"", prefixBytes:[]uint8(nil), prefixRune:0, prefixEnd:0x1, mpool:0, matchcap:4, prefixComplete:false, cond:0x4, minInputLen:13, longest:false} := regexp.MustCompile(`^[a-z]+@example\.(com|org)$`)11  matched→ true := pattern&regexp.Regexp{expr:"^[a-z]+@example\\.(com|org)$", prog:(*syntax.Prog)(⟨addr A⟩), onepass:(*regexp.onePassProg)(⟨addr B⟩), numSubexp:1, maxBitStateLen:0, subexpNames:[]string{"", ""}, prefix:"", prefixBytes:[]uint8(nil), prefixRune:0, prefixEnd:0x1, mpool:0, matchcap:4, prefixComplete:false, cond:0x4, minInputLen:13, longest:false}.MatchString(email"ada@example.com")12  label→ "invalid" := "invalid"
  2. label ← "example address"

    14if matchedtrue {15  label→ "example address" = "example address"16}
  3. fmt.Println("email=", email)

    18  fmt.Println("email=", email"ada@example.com")19  fmt.Println("matched=", matchedtrue)20  fmt.Println("label=", label"example address")21}
    outputemail= ada@example.com
    matched= true
    label= example address
  1. email ← "linus@example.org", pattern ← &regexp.Regexp{expr:"^[a-z]+@example\\.(com|org)$", prog:(*syntax.Prog)(⟨addr A⟩), onepass:(*regexp.onePassProg)(⟨addr B⟩), numSubexp:1, maxBitStateLen:0, subexpNames:[]string{"", ""}, prefix:"", prefixBytes:[]uint8(nil), prefixRune:0, prefixEnd:0x1, mpool:0, matchcap:4, prefixComplete:false, cond:0x4, minInputLen:13, longest:false}

    8func main() {9  var email→ "linus@example.org" = "linus@example.org"10  pattern→ &regexp.Regexp{expr:"^[a-z]+@example\\.(com|org)$", prog:(*syntax.Prog)(⟨addr A⟩), onepass:(*regexp.onePassProg)(⟨addr B⟩), numSubexp:1, maxBitStateLen:0, subexpNames:[]string{"", ""}, prefix:"", prefixBytes:[]uint8(nil), prefixRune:0, prefixEnd:0x1, mpool:0, matchcap:4, prefixComplete:false, cond:0x4, minInputLen:13, longest:false} := regexp.MustCompile(`^[a-z]+@example\.(com|org)$`)11  matched→ true := pattern&regexp.Regexp{expr:"^[a-z]+@example\\.(com|org)$", prog:(*syntax.Prog)(⟨addr A⟩), onepass:(*regexp.onePassProg)(⟨addr B⟩), numSubexp:1, maxBitStateLen:0, subexpNames:[]string{"", ""}, prefix:"", prefixBytes:[]uint8(nil), prefixRune:0, prefixEnd:0x1, mpool:0, matchcap:4, prefixComplete:false, cond:0x4, minInputLen:13, longest:false}.MatchString(email"linus@example.org")12  label→ "invalid" := "invalid"
  2. label ← "example address"

    14if matchedtrue {15  label→ "example address" = "example address"16}
  3. fmt.Println("email=", email)

    18  fmt.Println("email=", email"linus@example.org")19  fmt.Println("matched=", matchedtrue)20  fmt.Println("label=", label"example address")21}
    outputemail= linus@example.org
    matched= true
    label= example address
  1. email ← "bad-name", pattern ← &regexp.Regexp{expr:"^[a-z]+@example\\.(com|org)$", prog:(*syntax.Prog)(⟨addr A⟩), onepass:(*regexp.onePassProg)(⟨addr B⟩), numSubexp:1, maxBitStateLen:0, subexpNames:[]string{"", ""}, prefix:"", prefixBytes:[]uint8(nil), prefixRune:0, prefixEnd:0x1, mpool:0, matchcap:4, prefixComplete:false, cond:0x4, minInputLen:13, longest:false}

    8func main() {9  var email→ "bad-name" = "bad-name"10  pattern→ &regexp.Regexp{expr:"^[a-z]+@example\\.(com|org)$", prog:(*syntax.Prog)(⟨addr A⟩), onepass:(*regexp.onePassProg)(⟨addr B⟩), numSubexp:1, maxBitStateLen:0, subexpNames:[]string{"", ""}, prefix:"", prefixBytes:[]uint8(nil), prefixRune:0, prefixEnd:0x1, mpool:0, matchcap:4, prefixComplete:false, cond:0x4, minInputLen:13, longest:false} := regexp.MustCompile(`^[a-z]+@example\.(com|org)$`)11  matched→ false := pattern&regexp.Regexp{expr:"^[a-z]+@example\\.(com|org)$", prog:(*syntax.Prog)(⟨addr A⟩), onepass:(*regexp.onePassProg)(⟨addr B⟩), numSubexp:1, maxBitStateLen:0, subexpNames:[]string{"", ""}, prefix:"", prefixBytes:[]uint8(nil), prefixRune:0, prefixEnd:0x1, mpool:0, matchcap:4, prefixComplete:false, cond:0x4, minInputLen:13, longest:false}.MatchString(email"bad-name")12  label→ "invalid" := "invalid"1314  if matched {15    label = "example address"16  }1718  fmt.Println("email=", email"bad-name")19  fmt.Println("matched=", matchedfalse)20  fmt.Println("label=", label"invalid")21}
    outputemail= bad-name
    matched= false
    label= invalid