Documentation
¶
Overview ¶
*
- Created by GoLand.
- Brief: apache ant path matcher implement
- User: vibrant
- Date: 2019/03/30
- Time: 13:10
*
- Created by GoLand.
- Brief: matcher fields read/write
- User: vibrant
- Date: 2019/04/01
- Time: 14:57
*
- Created by GoLand.
- Brief: apache ant path matcher implement
- User: vibrant
- Date: 2019/03/31
- Time: 13:51
*
- Created by GoLand.
- Brief: constant use
- User: vibrant
- Date: 2019/03/30
- Time: 13:10
*
- Created by GoLand.
- Brief: path matcher interface
- User: vibrant
- Date: 2019/03/30
- Time: 13:10
*
- Created by GoLand.
- Brief: matcher fields read/write
- User: vibrant
- Date: 2019/04/01
- Time: 14:57
*
- Created by GoLand.
- Brief: matcher fields read/write
- User: vibrant
- Date: 2019/04/01
- Time: 18:05
*
- Created by GoLand.
- Brief: apache ant path matcher implement
- User: vibrant
- Date: 2019/03/30
- Time: 13:10
*
- Created by GoLand.
- Brief: string tool
- User: vibrant
- Date: 2019/03/30
- Time: 13:10
Index ¶
- Constants
- Variables
- func Bytes2Str(b []byte) string
- func HasText(source string) bool
- func IsBlank(source string) bool
- func StartsWith(str, prefix string, toffset int) bool
- func Str2Bytes(s string) []byte
- func TokenizeToStringArray(str, delimiters string, trimTokens, ignoreEmptyTokens bool) []*string
- func TokenizeToStringArray1(str, delimiters string) []*string
- type AntPathMatcher
- func (ant *AntPathMatcher) Combine(pattern1, pattern2 string) string
- func (ant *AntPathMatcher) ExtractPathWithinPattern(pattern, path string) string
- func (ant *AntPathMatcher) ExtractUriTemplateVariables(pattern, path string) *map[string]string
- func (ant *AntPathMatcher) GetPatternComparator(path string) *AntPatternComparator
- func (ant *AntPathMatcher) IsPattern(path string) bool
- func (ant *AntPathMatcher) Match(pattern, path string) bool
- func (ant *AntPathMatcher) MatchStart(pattern, path string) bool
- func (ant *AntPathMatcher) PatternCacheSize() int64
- func (ant *AntPathMatcher) SetCachePatterns(cachePatterns bool)
- func (ant *AntPathMatcher) SetCaseSensitive(caseSensitive bool)
- func (ant *AntPathMatcher) SetPathSeparator(pathSeparator string)
- func (ant *AntPathMatcher) SetTrimTokens(trimTokens bool)
- type AntPathStringMatcher
- type AntPatternComparator
- type PathMatcher
- type PathSeparatorPatternCache
- type PatternInfo
- func (pi *PatternInfo) GetDoubleWildcards() int
- func (pi *PatternInfo) GetLength() int
- func (pi *PatternInfo) GetSingleWildcards() int
- func (pi *PatternInfo) GetTotalCount() int
- func (pi *PatternInfo) GetUriVars() int
- func (pi *PatternInfo) IsLeastSpecific() bool
- func (pi *PatternInfo) IsPrefixPattern() bool
Constants ¶
const ( //DefaultPathSeparator Default path separator: "/" DefaultPathSeparator = "/" //CacheTurnoffThreshold CacheTurnoffThreshold = 65536 )
const DefaultVariablePattern = "(.*)"
DefaultVariablePattern
const EmptySpace = " "
EmptySpace
const EmptyString = ""
EmptyString
const MaxFindCount = 1 << 5
MaxFindCount default value = 32
Variables ¶
var Asterisk rune
*
var Brackets rune
{
var GlobPattern *regexp.Regexp
GlobPattern
var QuestionMark rune
?
var VariablePattern *regexp.Regexp
pattern
var WildcardChars []rune
WildcardChars
Functions ¶
func TokenizeToStringArray ¶
* * Tokenize the given {@code String} into a {@code String} array via a * {@link StringTokenizer}. * <p>The given {@code delimiters} string can consist of any number of * delimiter characters. Each of those characters can be used to separate * tokens. A delimiter is always a single character; for multi-character * delimiters, consider using {@link #delimitedListToStringArray}. * @param str the {@code String} to tokenize * @param delimiters the delimiter characters, assembled as a {@code String} * (each of the characters is individually considered as a delimiter) * @param trimTokens trim the tokens via {@link String#trim()} * @param ignoreEmptyTokens omit empty tokens from the result array * (only applies to tokens that are empty after trimming; StringTokenizer * will not consider subsequent delimiters as token in the first place). * @return an array of the tokens ({@code null} if the input {@code String} * was {@code null}) * @see java.util.StringTokenizer * @see String#trim() * @see #delimitedListToStringArray
TokenizeToStringArray
func TokenizeToStringArray1 ¶
TokenizeToStringArray1
Types ¶
type AntPathMatcher ¶
type AntPathMatcher struct {
// contains filtered or unexported fields
}
AntPathMatcher implement from PathMatcher interface
func New ¶
func New() *AntPathMatcher
* * Create a new instance with the {@link #DEFAULT_PATH_SEPARATOR}.
New
func NewS ¶
func NewS(separator string) *AntPathMatcher
* * Create a new instance with the {@link #DEFAULT_PATH_SEPARATOR}.
NewS
func (*AntPathMatcher) Combine ¶
func (ant *AntPathMatcher) Combine(pattern1, pattern2 string) string
@Override Combine 将pattern1和pattern2联合成一个新的pattern
func (*AntPathMatcher) ExtractPathWithinPattern ¶
func (ant *AntPathMatcher) ExtractPathWithinPattern(pattern, path string) string
@Override ExtractPathWithinPattern
func (*AntPathMatcher) ExtractUriTemplateVariables ¶
func (ant *AntPathMatcher) ExtractUriTemplateVariables(pattern, path string) *map[string]string
@Override ExtractUriTemplateVariables
func (*AntPathMatcher) GetPatternComparator ¶
func (ant *AntPathMatcher) GetPatternComparator(path string) *AntPatternComparator
@Override GetPatternComparator
func (*AntPathMatcher) IsPattern ¶
func (ant *AntPathMatcher) IsPattern(path string) bool
@Override IsPattern
func (*AntPathMatcher) Match ¶
func (ant *AntPathMatcher) Match(pattern, path string) bool
@Override Match
func (*AntPathMatcher) MatchStart ¶
func (ant *AntPathMatcher) MatchStart(pattern, path string) bool
@Override MatchStart
func (*AntPathMatcher) PatternCacheSize ¶
func (ant *AntPathMatcher) PatternCacheSize() int64
PatternCacheSize
func (*AntPathMatcher) SetCachePatterns ¶
func (ant *AntPathMatcher) SetCachePatterns(cachePatterns bool)
* * Specify whether to cache parsed pattern metadata for patterns passed * into this matcher's {@link #match} method. A value of {@code true} * activates an unlimited pattern cache; a value of {@code false} turns * the pattern cache off completely. * <p>Default is for the cache to be on, but with the variant to automatically * turn it off when encountering too many patterns to cache at runtime * (the threshold is 65536), assuming that arbitrary permutations of patterns * are coming in, with little chance for encountering a recurring pattern.
SetCachePatterns
func (*AntPathMatcher) SetCaseSensitive ¶
func (ant *AntPathMatcher) SetCaseSensitive(caseSensitive bool)
* Specify whether to perform pattern matching in a case-sensitive fashion. <p>Default is {@code true}. Switch this to {@code false} for case-insensitive matching.
SetCaseSensitive 区分大小写 The default is false
func (*AntPathMatcher) SetPathSeparator ¶
func (ant *AntPathMatcher) SetPathSeparator(pathSeparator string)
* Set the path separator to use for pattern parsing.
SetPathSeparator The default is "/",as in ant.
func (*AntPathMatcher) SetTrimTokens ¶
func (ant *AntPathMatcher) SetTrimTokens(trimTokens bool)
* Specify whether to trim tokenized paths and patterns.
SetTrimTokens 是否去除空格 The default is false
type AntPathStringMatcher ¶
type AntPathStringMatcher struct {
// contains filtered or unexported fields
}
* * Tests whether or not a string matches against a pattern via a {@link Pattern}. * <p>The pattern may contain special characters: '*' means zero or more characters; '?' means one and * only one character; '{' and '}' indicate a URI template pattern. For example <tt>/users/{user}</tt>.
AntPathStringMatcher
func NewDefaultStringMatcher ¶
func NewDefaultStringMatcher(pattern string, caseSensitive bool) *AntPathStringMatcher
NewDefaultStringMatcher part match
func NewMatchesStringMatcher ¶
func NewMatchesStringMatcher(pattern string, caseSensitive bool) *AntPathStringMatcher
NewMatchesStringMatcher full match
func (*AntPathStringMatcher) FindSubMatch ¶
func (sm *AntPathStringMatcher) FindSubMatch(source []byte, index int) *string
FindSubMatch 子查询
func (*AntPathStringMatcher) GroupCount ¶
func (sm *AntPathStringMatcher) GroupCount() int
GroupCount
func (*AntPathStringMatcher) MatchStrings ¶
func (sm *AntPathStringMatcher) MatchStrings(str string, uriTemplateVariables *map[string]string) bool
* * Main entry point. * * @return {@code true} if the string matches against the pattern, or {@code false} otherwise.
MatchStrings
type AntPatternComparator ¶
type AntPatternComparator struct {
// contains filtered or unexported fields
}
* * The default {@link Comparator} implementation returned by * {@link #getPatternComparator(String)}. * <p>In order, the most "generic" pattern is determined by the following: * <ul> * <li>if it's null or a capture all pattern (i.e. it is equal to "/**")</li> * <li>if the other pattern is an actual match</li> * <li>if it's a catch-all pattern (i.e. it ends with "**"</li> * <li>if it's got more "*" than the other pattern</li> * <li>if it's got more "{foo}" than the other pattern</li> * <li>if it's shorter than the other pattern</li> * </ul>
AntPatternComparator
func NewDefaultAntPatternComparator ¶
func NewDefaultAntPatternComparator(path string) *AntPatternComparator
NewDefaultAntPatternComparator
func (*AntPatternComparator) Compare ¶
func (comparator *AntPatternComparator) Compare(pattern1, pattern2 string) int
Compare
type PathMatcher ¶
type PathMatcher interface {
/**
* Does the given {@code path} represent a pattern that can be matched
* by an implementation of this interface?
* <p>If the return value is {@code false}, then the {@link #match}
* method does not have to be used because direct equality comparisons
* on the static path Strings will lead to the same result.
* @param path the path String to check
* @return {@code true} if the given {@code path} represents a pattern
*/
//IsPattern
IsPattern(path string) bool
/**
* Match the given {@code path} against the given {@code pattern},
* according to this PathMatcher's matching strategy.
* @param pattern the pattern to match against
* @param path the path String to test
* @return {@code true} if the supplied {@code path} matched,
* {@code false} if it didn't
*/
//Match
Match(pattern, path string) bool
/**
* Match the given {@code path} against the corresponding part of the given
* {@code pattern}, according to this PathMatcher's matching strategy.
* <p>Determines whether the pattern at least matches as far as the given base
* path goes, assuming that a full path may then match as well.
* @param pattern the pattern to match against
* @param path the path String to test
* @return {@code true} if the supplied {@code path} matched,
* {@code false} if it didn't
*/
//MatchStart
MatchStart(pattern, path string) bool
/**
* Given a pattern and a full path, determine the pattern-mapped part.
* <p>This method is supposed to find out which part of the path is matched
* dynamically through an actual pattern, that is, it strips off a statically
* defined leading path from the given full path, returning only the actually
* pattern-matched part of the path.
* <p>For example: For "myroot/*.html" as pattern and "myroot/myfile.html"
* as full path, this method should return "myfile.html". The detailed
* determination rules are specified to this PathMatcher's matching strategy.
* <p>A simple implementation may return the given full path as-is in case
* of an actual pattern, and the empty String in case of the pattern not
* containing any dynamic parts (i.e. the {@code pattern} parameter being
* a static path that wouldn't qualify as an actual {@link #isPattern pattern}).
* A sophisticated implementation will differentiate between the static parts
* and the dynamic parts of the given path pattern.
* @param pattern the path pattern
* @param path the full path to introspect
* @return the pattern-mapped part of the given {@code path}
* (never {@code null})
*/
//ExtractPathWithinPattern
ExtractPathWithinPattern(pattern, path string) string
/**
* Given a pattern and a full path, extract the URI template variables. URI template
* variables are expressed through curly brackets ('{' and '}').
* <p>For example: For pattern "/hotels/{hotel}" and path "/hotels/1", this method will
* return a map containing "hotel"->"1".
* @param pattern the path pattern, possibly containing URI templates
* @param path the full path to extract template variables from
* @return a map, containing variable names as keys; variables values as values
*/
//ExtractUriTemplateVariables
ExtractUriTemplateVariables(pattern, path string) *map[string]string
/**
* Given a full path, returns a {@link Comparator} suitable for sorting patterns
* in order of explicitness for that path.
* <p>The full algorithm used depends on the underlying implementation, but generally,
* the returned {@code Comparator} will
* {@linkplain java.util.Collections#sort(java.util.List, java.util.Comparator) sort}
* a list so that more specific patterns come before generic patterns.
* @param path the full path to use for comparison
* @return a comparator capable of sorting patterns in order of explicitness
*/
//GetPatternComparator
GetPatternComparator(path string) *AntPatternComparator
/**
* Combines two patterns into a new pattern that is returned.
* <p>The full algorithm used for combining the two pattern depends on the underlying implementation.
* @param pattern1 the first pattern
* @param pattern2 the second pattern
* @return the combination of the two patterns
* @throws IllegalArgumentException when the two patterns cannot be combined
*/
//Combine
Combine(pattern1, pattern2 string) string
// ------------------------------- fields -------------------------- //
//SetPathSeparator
SetPathSeparator(pathSeparator string)
//SetCaseSensitive
SetCaseSensitive(caseSensitive bool)
//SetTrimTokens
SetTrimTokens(trimTokens bool)
//SetCachePatterns
SetCachePatterns(cachePatterns bool)
// ------------------------------- fields size -------------------------- //
//stringMatcherCache size
PatternCacheSize() int64
}
PathMatcher
type PathSeparatorPatternCache ¶
type PathSeparatorPatternCache struct {
// contains filtered or unexported fields
}
* * A simple cache for patterns that depend on the configured path separator.
func NewDefaultPathSeparatorPatternCache ¶
func NewDefaultPathSeparatorPatternCache(pathSeparator string) *PathSeparatorPatternCache
NewDefaultPathSeparatorPatternCache 构造函数
func (*PathSeparatorPatternCache) GetEndsOnDoubleWildCard ¶
func (patternCache *PathSeparatorPatternCache) GetEndsOnDoubleWildCard() string
GetEndsOnDoubleWildCard 返回 "**"
func (*PathSeparatorPatternCache) GetEndsOnWildCard ¶
func (patternCache *PathSeparatorPatternCache) GetEndsOnWildCard() string
GetEndsOnWildCard 返回 "*"
type PatternInfo ¶
type PatternInfo struct {
// contains filtered or unexported fields
}
* * Value class that holds information about the pattern, e.g. number of * occurrences of "*", "**", and "{" pattern elements.
PatternInfo
func NewDefaultPatternInfo ¶
func NewDefaultPatternInfo(pattern string) *PatternInfo
NewDefaultPatternInfo
func (*PatternInfo) GetDoubleWildcards ¶
func (pi *PatternInfo) GetDoubleWildcards() int
GetDoubleWildcards
func (*PatternInfo) GetLength ¶
func (pi *PatternInfo) GetLength() int
*
- Returns the length of the given pattern, where template variables are considered to be 1 long.
func (*PatternInfo) GetSingleWildcards ¶
func (pi *PatternInfo) GetSingleWildcards() int
GetSingleWildcards