Go语言正则匹配问题:匹配hello world中的ello w及regexp.MatchString报错解决
问题修复方案
报错根因
- Go标准库的
regexp.MatchString方法设计返回两个值:第一个是布尔类型的匹配结果,第二个是正则语法错误、入参异常等场景返回的错误对象。代码中直接将该方法的返回值放到if判断条件中,只接收了一个值,不符合Go语法要求,因此抛出「多值在单值上下文使用」的报错。 - 编写的正则表达式存在语法和逻辑问题:原表达式
b\\ello w\\b中,开头的b是多余字符,单词边界符\b转义错误,同时测试字符串是大写H开头的Hello,正则默认区分大小写,就算解决语法问题也无法匹配到结果。
修复代码
正则写法修复
如果确实需要使用正则实现匹配,调整后代码如下:
package main import ( "fmt" "regexp" ) func check(result string) string { // 接收两个返回值,不需要处理错误时可用下划线占位 matched, _ := regexp.MatchString(`ello w`, result) if matched { fmt.Println("Found it ") return "True" } return "False" } func main() { text := "Hello world " check(text) }
如果需要兼容大小写的匹配场景,将正则改为(?i)ello w即可。
更高性能的固定子串匹配方案
如果只是判断是否包含固定子串,无需正则的复杂匹配能力,直接使用strings.Contains方法更简单高效:
package main import ( "fmt" "strings" ) func check(result string) string { if strings.Contains(result, "ello w") { fmt.Println("Found it ") return "True" } return "False" } func main() { text := "Hello world " check(text) }
内容的提问来源于stack exchange,提问作者max.syntax
相关产品推荐
相关产品推荐

