You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
689 B
36 lines
689 B
2 years ago
|
package regx
|
||
|
|
||
|
func isCharMatch(text, pattern string) bool {
|
||
|
return pattern[0] == '.' || pattern[0] == text[0]
|
||
|
}
|
||
|
|
||
|
func matchStar(text, pattern string) bool {
|
||
|
for {
|
||
|
switch {
|
||
|
case isMatch(text, pattern[2:]):
|
||
|
return true
|
||
|
case text == "" || !isCharMatch(text, pattern):
|
||
|
return false
|
||
|
default:
|
||
|
text = text[1:]
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func isMatch(text, pattern string) bool {
|
||
|
switch {
|
||
|
case pattern == "":
|
||
|
return text == ""
|
||
|
case len(pattern) >= 2 && pattern[1] == '*':
|
||
|
return matchStar(text, pattern)
|
||
|
case text != "" && isCharMatch(text, pattern):
|
||
|
return isMatch(text[1:], pattern[1:])
|
||
|
}
|
||
|
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
func IsMatch(text, pattern string) bool {
|
||
|
return isMatch(text, pattern)
|
||
|
}
|