package main
import (
"regexp"
"fmt"
)
func main() {
var re = regexp.MustCompile(`(?im)^(?=.{1,64}@)(?:("[^"\\]*(?:\\.[^"\\]*)*"@)|((?:[0-9a-z](?:\.(?!\.)|[-!#\$%&'\*\+\/=\?\^`\{\}\|~\w])*)?[0-9a-z]@))(?=.{1,255}$)(?:(\[(?:\d{1,3}\.){3}\d{1,3}\])|((?:(?=.{1,63}\.)[0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9])|((?=.{1,63}$)[0-9a-z][-\w]*))$`)
var str = `// Mix valid/invalid
david.jones@proseware.com
d.j@server1.proseware.com
jones@ms1.proseware.com
j.@server1.proseware.com
j@proseware.com9
js#internal@proseware.com
j_9@[129.126.118.1]
j..s@proseware.com
js*@proseware.com
js@proseware..com
js@proseware.com9
j.s@server1.proseware.com
"j\"s\""@proseware.com
js@contoso.中国.com
=========================================
// Valid
simple@example.com
very.common@example.com
disposable.style.email.with+symbol@example.com
other.email-with-hyphen@example.com
fully-qualified-domain@example.com
user.name+tag+sorting@example.com
fully-qualified-domain@example.com
x@example.com
carlosd'intino@arnet.com.ar
example-indeed@strange-example.com
admin@mailserver1
example@s.example
" "@example.org
"john..doe"@example.org
// Invalid
Abc.example.com
A@b@c@example.com
a\"b(c)d,e:f;g<h>i[j\\k]l@example.com
just\"not\"right@example.com
this is\"not\\allowed@example.com
this\\ still\"not\\allowed@example.com
1234567890123456789012345678901234567890123456789012345678901234+x@example.com
john..doe@example.com
john.doe@example..com
`
for i, match := range re.FindAllString(str, -1) {
fmt.Println(match, "found at index", i)
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Golang, please visit: https://golang.org/pkg/regexp/