package main
import (
"regexp"
"fmt"
)
func main() {
var re = regexp.MustCompile(`(?im)([-\.\w]+:\/{2,3})(?!.*[.]{2})(?![-.*\.])((?!.*@\.)[-_\w@^=%&:;~+\.]+(?<![-\.]))(\/[-_\w@^=%&:;/~+\.]+(?<!\.))?\??([-_\w=&@$!|~+]+)*#?([-_\w=&@$!|~+]+)*`)
var str = `DB_URL=postgresql://postgres:postgres@localhost/postgres?timeout=0
# Damn, Daniel!
Bob: have you checked https://www.facebook.com?
lorem https://github.com/justsml?tab=activity#top ipsum
smb:///winbox/dfs/ - ipp://printer
leading text chrome-extension://flags??#
s3://buckets/for/all?true=true
s3:///////buckets-o-fun
pkcs11://because-pkcs7-is-weak#only=hash
\||@@https://www.google.com <- should match when extracting
https://we - this is valid
s3://buckets-o-fun/!hi/raw=val&#keep=hashin'?
http://aaa.com.co.com:8080/test?dan=dev#den
hi. pkcs11://because-pkcs7-is-weak
hi. a://b/c?d=e#f=g && a://b/c?d]
hi. chrome-extension://flags hi.
hi. ms-help://good-luck/index.html hi.
hi. .iris.beep://really/dots. hi.
hi. iris.beep://really/dots?test=qs hi.
---
a://b]/c - Should match \`a://b\` - it's smallest match.
http://www.c:ool.com.au - this one's tricky, should match auth URIs: proto://user:pass@host. Including cases where the password could be omitted (\`proto://user@host\`.)
boop://really-/ -- technically domains shouldn't end in dashes or other 'special' chars, but this is technically a valid URI.
---
a://b./c?d. -- bad dns, trailing dot: tricky w/o look-arounds. (Adding an OR pattern would muddle the returned data indexes.) -- should match \`a://b\`
Invalid Examples:
https://www...google...com
https://we@.com
https://asdas-.com
http://-apple-.com
a://(b/c
chrome-extension)://flags
ms-help://|good-luck.html
. , ; : ) ] }
`
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/