package main
import (
"regexp"
"fmt"
)
func main() {
var re = regexp.MustCompile(`(?m)(\n|\s)(?:(?:\+?(\d{1}|\d{2}|\d{3})\s*)\s*(?:\(\s*(\d{1}|\d{2}|\d{3})\s*\)|(\d{1,3}))\s*\-?(?:\(\s*(\d{1,3})\s*\)|(\d{3}))\s*\-?(?:\d{2}\s*\-?\d{2}))`)
var str = `
+79996364778 rus
8 (918) 373-6633 rus
+1 650-798-2800 usa
8(949)373-66-55 rus
+7 (961) 859-56-19 rus
+1 205-635-1136 usa
+22(909)333 4334
+7(985)5310868
+79855310868
88008454545
+55 11 99999-5555 Brazil
+593 7 282-3889 Ecuador
(+44) 0848 9123 456 UK
+1 284 852 5500 BVI
+1 345 9490088 Grand Cayman
+32 2 702-9200 Belgium
+65 6511 9266 Asia Pacific
+86 21 2230 1000 Shanghai
+9124 4723300 India
+821012345678 South Korea
And for your extension pleasure
+55 11 99999-5555 ramal 123 Brazil
+55 11 99999-5555 foo786544 Brazil
(?!\b(0)\1+\b)(\+?\d{1,3})\s?\(?\d{3}\)?\s?([. -]?)\d{3}\3\d{4}`
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/