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

golang中带有嵌套组的正则表达式问题

golang中带有嵌套组的正则表达式问题

Go
largeQ 2021-10-25 17:06:41
考虑以下玩具示例。我想在 Go 中匹配一个带有正则表达式的名称,其中名称是a由 single 分隔的字母序列#,因此a#a#aaa有效,但a#或a##a无效。我可以通过以下两种方式对正则表达式进行编码:r1 := regexp.MustCompile(`^a+(#a+)*$`)r2 := regexp.MustCompile(`^(a+#)*a+$`)这两个都有效。现在考虑匹配由单斜线分隔的名称序列的更复杂的任务。如上所述,我可以通过两种方式对其进行编码:^N+(/N+)*$^(N+/)*N+$其中 N 是带有 ^ 和 $ 剥离的名称的正则表达式。因为我有两个案例 N,所以现在我可以有 4 个正则表达式:    ^a+(#a+)*(/a+(#a+)*)*$    ^(a+#)*a+(/a+(#a+)*)*$    ^((a+#)*a+/)*a+(#a+)*$    ^((a+#)*a+/)*(a+#)*a+$问题是为什么当与字符串匹配时"aa#a#a/a#a/a",第一个失败而其余 3 个案例按预期工作?即是什么导致第一个正则表达式不匹配?完整代码是:package mainimport (    "fmt"    "regexp")func main() {    str := "aa#a#a/a#a/a"    regs := []string {        `^a+(#a+)*(/a+(#a+)*)*$`,        `^(a+#)*a+(/a+(#a+)*)*$`,        `^((a+#)*a+/)*a+(#a+)*$`,        `^((a+#)*a+/)*(a+#)*a+$`,    }        for _, r := range(regs) {        fmt.Println(regexp.MustCompile(r).MatchString(str))    } }令人惊讶的是它打印 false true true true
查看完整描述
  • 2 回答
  • 0 关注
  • 232 浏览
慕课专栏
更多

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号