diff --git a/when/parse.go b/when/parse.go index 11a27c5..b83d4ee 100644 --- a/when/parse.go +++ b/when/parse.go @@ -187,8 +187,13 @@ func matchPeriodPattern01(base time.Time, str string) (startimer.StarTimer, erro func matchPeroidPattern02(base time.Time, str string) (startimer.StarTimer, error) { str = transChn(str) + str = strings.ReplaceAll(str, "周日", "周0") + str = strings.ReplaceAll(str, "礼拜天", "周0") + str = strings.ReplaceAll(str, "星期日", "周0") + str = strings.ReplaceAll(str, "星期天", "周0") + str = strings.ReplaceAll(str, "周天", "周0") var rpt startimer.Repeats - reg := regexp.MustCompile(`(每)?([周星期礼拜][周礼拜星期到1-6日天]+)+的?([上中下午夜早凌清晨傍晚里]+)?(\d{1,4}[个点时:]+)?(\d{0,4}[分半:]?钟?)?(\d{1,10}秒?钟?)?`) + reg := regexp.MustCompile(`(每)?([周星期礼拜日天]\d{0,1})到?([周礼拜星期日天]?\d{0,1})?的?([上中下午夜早凌清晨傍晚里]+)?(\d{1,4}[个点时::]+)?(\d{0,4}[分半::]?钟?)?(\d{1,10}秒?钟?)?`) if reg.MatchString(str) { pts := reg.FindStringSubmatch(str) scs := len(strings.Split(pts[0], "周")) @@ -199,15 +204,9 @@ func matchPeroidPattern02(base time.Time, str string) (startimer.StarTimer, erro return startimer.StarTimer{}, errors.New("Invalid stings") } if pts[2] != "" { - wk := strings.ReplaceAll(pts[2], "周日", "周0") - wk = strings.ReplaceAll(wk, "礼拜天", "周0") - wk = strings.ReplaceAll(wk, "星期日", "周0") - wk = strings.ReplaceAll(wk, "星期天", "周0") - wk = strings.ReplaceAll(wk, "周天", "周0") - if strings.Contains(wk, "到") { - pk := strings.Split(wk, "到") - startWk := getNumbers(pk[0]) - endWk := getNumbers(pk[1]) + if len(pts[3]) != 0 { + startWk := getNumbers(pts[2]) + endWk := getNumbers(pts[3]) if endWk < startWk { endWk += 7 } @@ -219,15 +218,15 @@ func matchPeroidPattern02(base time.Time, str string) (startimer.StarTimer, erro rpt.Repeat = append(rpt.Repeat, startimer.Repeat{Unit: startimer.STAR_WEEK, Value: uint32(num)}) } } else { - wkNum := getNumbers(wk) + wkNum := getNumbers(pts[2]) rpt.Repeat = append(rpt.Repeat, startimer.Repeat{Unit: startimer.STAR_WEEK, Value: uint32(wkNum)}) } } - timeParse := pts[3] + timeParse := pts[4] var hour uint32 - if pts[4] != "" { - hour = uint32(getNumbers(pts[4])) + if pts[5] != "" { + hour = uint32(getNumbers(pts[5])) if timeParse == "下午" || strings.Contains(timeParse, "晚") || strings.Contains(timeParse, "夜") { hour += 12 } @@ -251,16 +250,16 @@ func matchPeroidPattern02(base time.Time, str string) (startimer.StarTimer, erro } rpt.Repeat = append(rpt.Repeat, startimer.Repeat{Unit: startimer.STAR_HOUR, Value: hour}) } - if pts[5] != "" { - if pts[5] == "半" { - pts[5] = "30" + if pts[6] != "" { + if pts[6] == "半" { + pts[6] = "30" } - rpt.Repeat = append(rpt.Repeat, startimer.Repeat{Unit: startimer.STAR_MINUTE, Value: uint32(getNumbers(pts[5]))}) + rpt.Repeat = append(rpt.Repeat, startimer.Repeat{Unit: startimer.STAR_MINUTE, Value: uint32(getNumbers(pts[6]))}) } else if hour != 0 { rpt.Repeat = append(rpt.Repeat, startimer.Repeat{Unit: startimer.STAR_MINUTE, Value: 0}) } - if pts[6] != "" { - rpt.Repeat = append(rpt.Repeat, startimer.Repeat{Unit: startimer.STAR_SECOND, Value: uint32(getNumbers(pts[6]))}) + if pts[7] != "" { + rpt.Repeat = append(rpt.Repeat, startimer.Repeat{Unit: startimer.STAR_SECOND, Value: uint32(getNumbers(pts[7]))}) } else if hour != 0 { rpt.Repeat = append(rpt.Repeat, startimer.Repeat{Unit: startimer.STAR_SECOND, Value: 0}) } diff --git a/when/parse_test.go b/when/parse_test.go index d1f82c0..9a5a0e1 100644 --- a/when/parse_test.go +++ b/when/parse_test.go @@ -19,10 +19,12 @@ func TestParse(t *testing.T) { } func TestSigParse(t *testing.T) { - for _, code := range []string{"凌晨零点提醒我"} { - a, _ := WhenWithPeriod(code) - //fmt.Println(a.Repeats()[0]) + for _, code := range []string{"每周一到周五11:25提醒大家干饭了!"} { + a, err := WhenWithPeriod(code) + fmt.Println(err) fmt.Println(a.NextTimer(), a.RunCountLimit(), code) + pm := a.NextTimer() + fmt.Println(pm) fmt.Println(a.NextTimerAfterDate(time.Now().Add(time.Hour * 72))) } }