Standard Library Utilities
Regexp Match
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
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)
}
email ← "ada@example.com", pattern ← ®exp.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→ ®exp.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®exp.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"label ← "example address"
14if matchedtrue {15 label→ "example address" = "example address"16}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
email ← "linus@example.org", pattern ← ®exp.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→ ®exp.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®exp.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"label ← "example address"
14if matchedtrue {15 label→ "example address" = "example address"16}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
email ← "bad-name", pattern ← ®exp.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→ ®exp.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®exp.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