Go (RE2)

Redis Connection URL in GO

Match Redis connection URLs in both `redis://` and `rediss://` (TLS) forms, capturing user, password, host, port, and DB index.

Try it in the GO tester →

Pattern

regexGO
rediss?:\/\/(?:([^:@\s]+)(?::([^@\s]*))?@)?([^:\/\s]+)(?::(\d+))?(?:\/(\d+))?   (flags: g)

Go (RE2) code

goGo
package main

import (
	"fmt"
	"regexp"
)

func main() {
	re := regexp.MustCompile(`rediss?:\/\/(?:([^:@\s]+)(?::([^@\s]*))?@)?([^:\/\s]+)(?::(\d+))?(?:\/(\d+))?`)
	input := `REDIS_URL=redis://default:pass@redis.upstash.io:6379/0`
	for _, match := range re.FindAllString(input, -1) {
		fmt.Println(match)
	}
}

Uses `regexp.MustCompile` (panics on bad patterns at startup) and `FindAllString` for all matches.

How the pattern works

rediss?:\/\/ matches either scheme. The optional auth group captures user and optional password. The host group captures the hostname. (?::(\d+))? optionally captures the port. (?:\/(\d+))? optionally captures the database index (Redis databases are numeric).

Examples

Input

REDIS_URL=redis://default:pass@redis.upstash.io:6379/0

Matches

  • redis://default:pass@redis.upstash.io:6379/0

Input

rediss://cluster.example.com:6380

Matches

  • rediss://cluster.example.com:6380

Input

no redis url

No match

Same pattern, other engines

← Back to Redis Connection URL overview (all engines)