r1 := regexp.MustCompile(`^a+(#a+)*$`)r2 := regexp.MustCompile(`^(a+#)*a+$`)
这两项都有效.现在考虑更复杂的匹配由单斜杠分隔的名称序列的任务.如上所述,我可以用两种方式编写代码:
^N+(/N+)*$^(N+/)*N+$
其中N是带有^和$stripped的名称的正则表达式.由于我有两个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个案例按预期工作?即是什么导致第一个正则表达式不匹配?完整的code是:
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)) } }
令人惊讶的是它打印错误的真实
这一定是golang regexp引擎中的一个BUG.一个更简单的测试用例是^ a(/ a(#a)*)* $无法匹配a / a#a而^(a)(/ a(#a)*)* $有效,见 http://play.golang.org/p/CDKxVeXW98.我提交了https://github.com/golang/go/issues/11905
总结以上是内存溢出为你收集整理的在golang中使用嵌套组的regexp问题全部内容,希望文章能够帮你解决在golang中使用嵌套组的regexp问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)