为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 golang 正则表达式中匹配字符或字符串结尾?

如何在 golang 正则表达式中匹配字符或字符串结尾?

Go
梦里花落0921 2022-03-03 15:05:03
我无法在正则表达式中(在 golang 中)解决如何匹配字符、分隔符或字符串结尾的问题。以下几乎是我想要的:url := "test20160101"if i, _ := regexp.MatchString("[-a-zA-Z/]20[012]\\d[01]\\d[0123]\\d[-a-zA-Z/]", url); i == true {    t := regexp.MustCompile("[-a-zA-Z/](20[012]\\d[01]\\d[0123]\\d)[-a-zA-Z/]").FindStringSubmatch(url)[1]    fmt.Println("match: ", t)}https://play.golang.org/p/eWZ_DiOVBl但我还想匹配以下内容:url := "test-20160101-"url := "/20160101/page.html"我注意到golang 文档中有一个 \z但这不起作用,至少当我把它放在里面[-a-zA-Z/]时[-a-zA-Z\\z/]
查看完整描述

2 回答

?
Cats萌萌

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])

        }

    }

}


查看完整回答
反对 回复 2022-03-03
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

?在模式的末尾放一个。这意味着前面的项目是可选的。

如果要将模式锚定在字符串的末尾以匹配,请在最后(在 之后)放置一个$(或)。\z?

此外,您应该在 RE 周围使用反引号而不是双引号。这样你就不必逃避反斜杠。

正如@Zan Lynx 提到的,只编译一次RE。


查看完整回答
反对 回复 2022-03-03
  • 2 回答
  • 0 关注
  • 276 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信