func concat(exp ...*regexp.Regexp) *regexp.Regexp {
	s := ""
	for i := range exp {
		s = s + exp[i].String()
	}
	return regexp.MustCompile(s)
}
concat concats several expressions into one.
package reference
import "regexp"
var (
	regAlphanum = expression(`[A-Za-z0-9]`)
	regSeparator = expression(`([-._:@+]|--)`)
	regComponent = group(
		oneOrMore(regAlphanum),
		zeroOrMore(regSeparator, oneOrMore(regAlphanum)))
	regRef = entire(
		regComponent,
		zeroOrMore(expression("/"), regComponent))
	regTag = expression(`:\w[\w.-]*$`)
	regDigest = expression(`@[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*[:][[:xdigit:]]{32,}`)
)
func expression(literal string) *regexp.Regexp {
	return regexp.MustCompile(literal)
}