44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
package imageparser
 | 
						|
 | 
						|
import "regexp"
 | 
						|
 | 
						|
/*
 | 
						|
This code is directly lifted from the distribution codebase as they haven't been exported.
 | 
						|
 | 
						|
For reference: https://github.com/distribution/distribution/blob/9329f6a62b67d5e06d50dc93997c7705a075fcd9/reference/regexp.go
 | 
						|
*/
 | 
						|
 | 
						|
var (
 | 
						|
	// match compiles the string to a regular expression.
 | 
						|
	match = regexp.MustCompile
 | 
						|
	// TagRegexp matches valid tag names. From docker/docker:graph/tags.go.
 | 
						|
	TagRegexp = match(`[\w][\w.-]{0,127}`)
 | 
						|
 | 
						|
	// anchoredTagRegexp matches valid tag names, anchored at the start and
 | 
						|
	// end of the matched string.
 | 
						|
	anchoredTagRegexp = anchored(TagRegexp)
 | 
						|
 | 
						|
	// DigestRegexp matches valid digests.
 | 
						|
	DigestRegexp = match(`[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*[:][[:xdigit:]]{32,}`)
 | 
						|
 | 
						|
	// anchoredDigestRegexp matches valid digests, anchored at the start and
 | 
						|
	// end of the matched string.
 | 
						|
	anchoredDigestRegexp = anchored(DigestRegexp)
 | 
						|
)
 | 
						|
 | 
						|
// anchored anchors the regular expression by adding start and end delimiters.
 | 
						|
func anchored(res ...*regexp.Regexp) *regexp.Regexp {
 | 
						|
	return match(`^` + expression(res...).String() + `$`)
 | 
						|
}
 | 
						|
 | 
						|
// expression defines a full expression, where each regular expression must
 | 
						|
// follow the previous.
 | 
						|
func expression(res ...*regexp.Regexp) *regexp.Regexp {
 | 
						|
	var s string
 | 
						|
	for _, re := range res {
 | 
						|
		s += re.String()
 | 
						|
	}
 | 
						|
 | 
						|
	return match(s)
 | 
						|
}
 |