2 回答
TA贡献1805条经验 获得超9个赞
我很感兴趣,只是为了好玩而玩弄它。也许是这样的:https: //play.golang.org/p/GRVnHTwW0g
package main
import (
"fmt"
"regexp"
)
func main() {
// Want to match "test-20160101", "/20160101/" and "test-20160101"
re := regexp.MustCompile(`[-a-zA-Z/](20[012]\d[01]\d[0123]\d)([-a-zA-Z/]|\z)`)
urls := []string{
"test-20160101",
"/20160101/page.html",
"test20160101",
"nomatch",
"test19990101",
}
for _, url := range urls {
t := re.FindStringSubmatch(url)
if len(t) > 2 {
fmt.Println("match", url, "=", t[1])
}
}
}
TA贡献1824条经验 获得超6个赞
?
在模式的末尾放一个。这意味着前面的项目是可选的。
如果要将模式锚定在字符串的末尾以匹配,请在最后(在 之后)放置一个$
(或)。\z
?
此外,您应该在 RE 周围使用反引号而不是双引号。这样你就不必逃避反斜杠。
正如@Zan Lynx 提到的,只编译一次RE。
- 2 回答
- 0 关注
- 276 浏览
添加回答
举报