我有字符串:
“123abc456def456”
我想返回“123”和“456”之间的最短字符串,即“abc”.我试过FindStringSubmatch:
package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile("123(.*)456") fmt.Printf("%q\n",re.FindStringSubmatch("123abc456def456")) }
它只返回最长的字符串:
[“123abc456def456” “abc456def”]
如何返回最短的字符串“abc”?
*是一个
greedy运算符,意味着它将尽可能多地匹配,并且仍然允许正则表达式的其余部分匹配.使用 *?对于非贪婪的匹配,意思是“零或更多 – 最好尽可能少”.
一旦你指定问号,你就说明了(一旦你找到数字“4”……停止,你就完成了.)
re := regexp.MustCompile("123(.*?)456") rm := re.FindStringSubmatch("123abc456def456") fmt.Printf("%q",rm) // ["123abc456" "abc"]
或者只打印最短的匹配,我会这样做:
re := regexp.MustCompile("123(.*?)456") rm := re.FindStringSubmatch("123abc456def456") if len(rm) != 0 {fmt.Printf("%q",rm[1])} // "abc"
原文地址:https://www.jb51.cc/go/186833.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。