我正在使用go1.10 darwin / amd64,这是代码:
package main
import (
"fmt"
"regexp"
)
func main() {
raw := "012 abc 012"
r := regexp.MustCompile(`(\d+).*(\d+)`)
m := r.FindStringSubmatch(raw)
fmt.Printf("len(m)=%v\n%v\n%v\n%v\n", len(m), m[0], m[1], m[2])
}
输出是:
len(m)= 3
012 abc 012
012
2
您也可以在此处运行:https://play.golang.org/p/i2zlhClB72e
我希望m [2]的输出是“012”而不是“2”。
有谁能让我知道问题出在哪里?非常感谢。
答案 0 :(得分:2)
正则表达式是贪婪的,因此01
将与2
匹配,只留下\d+
以匹配最终的(\d+)[^\d]*(\d+)$
。
您可能希望将表达式更改为以下内容:len(m)=3
012 abc 012
012
012
以匹配数字序列(捕获),除数字序列之外的任何数字,数字序列(捕获)以及结束线。
其余的相同代码将打印出您的预期:
InfInt myint1 = "15432154865413186646848435184100510168404641560358";
InfInt myint2 = 156341300544608LL;
myint1 *= --myint2 - 3;
std::cout << myint1 << std::endl;