parser.go
func isNextSuffixPattern(p []string) bool {
	if len(p) >= 2 && isMatchPattern(p[0]) && !isMatchPattern(p[1]) {
		matcher, _ := parseMatcher(p[0])
		if _, ok := matcher.(*FixedLengthMatcher); ok {
			return false
		}
		r, _ := utf8.DecodeRuneInString(p[1])
		return matcher.MatchRune(r)
	}
	return false
}
func isNextSuffixPattern(p []string) bool {
	if len(p) >= 2 && isMatchPattern(p[0]) && !isMatchPattern(p[1]) {
		matcher, _ := parseMatcher(p[0])
		if _, ok := matcher.(*FixedLengthMatcher); ok {
			return false
		}
		r, _ := utf8.DecodeRuneInString(p[1])
		return matcher.MatchRune(r)
	}
	return false
}
// isNextSuffixPattern see next 2 patterns can be suffix matcher. If following
// two cases are both true, it could possibly become a suffix matcher.
//   1. the first pattern is a Matcher.
//   2. the next pattern is a static pattern.
// If the first matcher can't match the first rune of the second static pattern,
// next pattern should be a suffix matcher combined the two patterns.