123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- package utils
- import (
- "log"
- "regexp"
- "sync"
- )
- const (
- HeaderRegExp = "^([\x21-\x7E^:]+):(.*)"
- FoldingRegExp = "^\\s+(.*)"
- BoundaryStartRegExp = "^--(.*)"
- BoundaryEndRegExp = "^--(.*)--$"
- BoundaryRegExp = "boundary=\"(.*)\""
- )
- const (
- UserRegExp = "^[a-zA-Z][\\w0-9\\._]*"
- )
- type RegExpUtils regExpUtils
- var (
- once sync.Once
- instance *regExpUtils
- )
- func RegExpUtilsInstance() *RegExpUtils {
- once.Do(func() {
- instance, _ = newRegExpUtils()
- })
- return (*RegExpUtils)(instance)
- }
- type regExpUtils struct {
- UserChecker *regexp.Regexp
- HeaderFinder *regexp.Regexp
- FoldingFinder *regexp.Regexp
- BoundaryStartFinder *regexp.Regexp
- BoundaryEndFinder *regexp.Regexp
- BoundaryFinder *regexp.Regexp
- }
- func newRegExpUtils() (*regExpUtils, error) {
- headerFinder, err := regexp.Compile(HeaderRegExp)
- if err != nil {
- log.Fatalf("Invalid regexp %s\n", err)
- return nil, err
- }
- foldingFinder, err := regexp.Compile(FoldingRegExp)
- if err != nil {
- log.Fatalf("Invalid regexp %s\n", err)
- return nil, err
- }
- boundaryStartFinder, err := regexp.Compile(BoundaryStartRegExp)
- if err != nil {
- log.Fatalf("Invalid regexp %s\n", err)
- return nil, err
- }
- boundaryEndFinder, err := regexp.Compile(BoundaryEndRegExp)
- if err != nil {
- log.Fatalf("Invalid regexp %s\n", err)
- return nil, err
- }
- boundaryFinder, err := regexp.Compile(BoundaryRegExp)
- if err != nil {
- log.Fatalf("Invalid regexp %s\n", err)
- return nil, err
- }
- userChecker, err := regexp.Compile(UserRegExp)
- if err != nil {
- log.Fatalf("Invalid regexp %s\n", err)
- return nil, err
- }
- ru := ®ExpUtils{
- UserChecker: userChecker,
- HeaderFinder: headerFinder,
- FoldingFinder: foldingFinder,
- BoundaryStartFinder: boundaryStartFinder,
- BoundaryEndFinder: boundaryEndFinder,
- BoundaryFinder: boundaryFinder,
- }
- return ru, nil
- }
|